Fonction retournant un tableau allouer dynamiquement [Résolu] - C - Programmation
Marsh Posté le 09-03-2009 à 19:05:21
bah le message est explicite. Si tu compiles ton programmes quasi tel-quel, tu n'auras aucun problème.
Marsh Posté le 09-03-2009 à 19:41:35
Ceci n'est pas un message d'erreur? Ca signifie que ça marche?
J'ai déjà googler cette erreure avec aucune réponse concluante...
Marsh Posté le 09-03-2009 à 20:00:37
Le message à l'air explicite. Vérifies que tu n'appelles pas deux fois free() sur le même bloc (d'après ton code, tu n'as pas l'air d'avoir fait cette erreur). Donc tu as probablement un buffer overflow (erreur classique, mais extrêmement chiante à débugger).
À tout hasard, et si ce n'est pas trop long, poste le code qu'il y a après :
Code :
|
Marsh Posté le 09-03-2009 à 20:51:29
Après:
Code :
|
C'est du code en C basique de ce type là:
Code :
|
J'ai bien revérifier et dans tout mon code j'ai des free() que dans mon main donc ça vient pas de là. SI je mets la ligne (dans le main) free(roundkey) en commentaire, l'erreure disparaît.
L'erreure ne viendrait-elle pas du fait que j'alloue mon tableau dans ma fonction, et ensuite je retourne que le pointeur sur le premier élément; donc quand je fais free(roundkey) dans mon main, il ne trouve pas la zone allouée?
Et voici l'erreure en entier:
Code :
|
Et merci pour vos réponses si rapide!
Marsh Posté le 09-03-2009 à 20:58:15
Code :
|
Soit tu alloues un trop peu, soit tu passes une fois de trop.
Marsh Posté le 09-03-2009 à 21:39:43
et utilise 'i' comme variable de boucle, pas un affreux RoundNbr avec une casse pourrie
Marsh Posté le 09-03-2009 à 21:45:16
Merci "Un Programmeur", tu avais parfaitement raison, j'allouais une case de moins. Problème réglé.
Concernant mon affreux indice, j'ai lu que pour plus de lisibilité dans les gros projets, il valait mieux utiliser des variables qui avaient une signification, pour être sur de ne pas confondre deux variables (j'ai donner que une petite partie de mon code).
Merci beaucoup, problème résolu.
Marsh Posté le 09-03-2009 à 22:24:39
samlesu a écrit : Concernant mon affreux indice, j'ai lu que pour plus de lisibilités dans les gros projets, il valait mieux utiliser des variables qui avaient une signification, pour être sur de ne pas confondre deux variables (j'ai donner que une petite partie de mon code). |
C'est faux. C'est illisible. i, j et k sont des noms des variables d'indices traditionnels.
Marsh Posté le 10-03-2009 à 08:09:25
samlesu a écrit : Je souhaite initialiser un tableau dans une fonction et ensuite l'utiliser dans mon main. Je dois aussi faire cela pour des matrices, mais je suppose que quand j'aurais résolu mon problème pour le tableau, résoudre pour une matrice pas plus difficile. Comment faire cela proprement? Je pensais à allouer le tableau dans le main, puis passer l'adresse du tableau en argumen...
|
nRounds n'est pas définie. C'est une globale ? Pourquoi ce n'est pas un paramètre de la fonction ?
Le code fourni ne peut pas provoquer l'erreur indiquée. Le problème est ailleurs.
Marsh Posté le 10-03-2009 à 08:15:24
samlesu a écrit : Après:
|
Basique, mais faux (comportement indéfini). Tu fais un tour de trop. Pourquoi ce +1 ?
Je rappelle que les indices valides d'un tableau de N éléments vont de 0 à N-1.
La boucle 'canonique' qui génère ces indices est
Code :
|
Faut pas s'écarter des Bonnes Pratiques, sinon, on est quasiment sûr de se prendre une baffe...
Tu as beaucoup de chance que le défaut ait été capté aussi vite par ton système.
P.S. : Et Taz a raison. un indice, c'est i.
Marsh Posté le 09-03-2009 à 18:52:00
Bonjour à tous,
Alors voilà mon problème, après avoir cherché sur de nombreux cours/tutoriels de C disponibles sur la toile et après avoir feuilleté ce forum, j'ai pas trouvé de solution à mon problème.
Je souhaite initialiser un tableau dans une fonction et ensuite l'utiliser dans mon main. Je dois aussi faire cela pour des matrices, mais je suppose que quand j'aurais résolu mon problème pour le tableau, résoudre pour une matrice pas plus difficile. Comment faire cela proprement? Je pensais à allouer le tableau dans le main, puis passer l'adresse du tableau en argumen...
Voilà mon code simplifié (sur demande je peux fournir mon code entier, mais je pense avoir laissé toutes les parties importantes):
Et j'ai une erreure de ce type là à la compilation:
Merci d'avance pour votre aide!
Message édité par samlesu le 09-03-2009 à 21:45:40