[C] Erreur ntdll

Résolu
Foreverson Messages postés 231 Date d'inscription   Statut Membre Dernière intervention   -  
Foreverson Messages postés 231 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je débute en C, je travaille avec Code::Blocks sous Vista. Mon programme plantait, on m'a conseillé d'utiliser le Debuggueur, ce que j'ai fait. Je ne comprends absolument rien aux informations qu'il me renvoie : elles commencent toutes par ntdll! suivies de choses comme DbgUiConvertStateChangeStructure() ou encore RtlTimeToTimeFields.

J'ai cru comprendre que ça venait probablement d'une erreur d'adressage dans mon programme ou quelque chose du genre.

Mes malloc sont bien suivis par des free, je ne vois pas d'où peut venir l'erreur...
Je peux difficilement poster des lignes de code car mon programme est assez gros.

Dernière chose qui pourrait vous aider. Mon programme ne plantait pas jusqu'à ce que j'utilise la fonction fopen (j'ai fait attention que le pointeur sur le ficher soit non nul, et j'utilise bien fclose à la fin de l'utilisation)

Si quelqu'un peut m'aider à comprendre ce qui provoque ces messages d'erreur,

Merci d'avance

6 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
le debug sous codeblock, j'ai un peu de mal. Les erreurs sont étonnantes, on dirait qu'elles vienent de dll win.
Utilises tu des bibliothèques particulière ?
As tu bien compiler ton code avec l'option de debug (-g avec gcc) ? quel est ton compilateur ?
Quel debugueur utilises tu ? (gdb avec gcc normalement, un debugueur est lié à un compilateur)
0
Foreverson Messages postés 231 Date d'inscription   Statut Membre Dernière intervention   27
 
Bonjour,
Je n'utilise que des bibliothèques classiques, le compilateur (d'après ce que je comprends) c'est "GNU GCC Compiler" et la case [-g] est bien cochée, à la fois pour la compilation et le Debug.
Je dois te dire que j'y connais rien dans toutes ces options, donc si tu as questions ou des suggestions, n'hésite pas à demander.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
donne toujours tes bibliothèques, pour être sur.
avec gdb, ça va être plus simple, je peux te guider en ligne de commande.
Tu va dans une console, tu te place dans le répertoire de ton exécutable, et tu lance :
/rep/to/gdb prog.exe
le debugueur (gdb) ouvre ton programme et fait une première petite analyse. Tu arrives alors sur un prompt.
Là tu tapes "run" et entré, ton programme se lance.
Lorsqu'il rencontre l'erreur, normalement gdb stoppe et t'affiche où il a rencontré l'erreur.
0
Foreverson Messages postés 231 Date d'inscription   Statut Membre Dernière intervention   27
 
Comme bibliothèque, j'ai chargé stdlib, stdio, string et time.
Par contre si on peut éviter les commandes console, j'suis pas très à l'aise avec ça en fait.
Encore moins sous Windows.

J'ai une question sur les malloc. J'ai vu certaines fois des "cast "avant des malloc, exemple :
int * pointeur=(int *) malloc (sizeof(int));
Dans mon programme, je n'ai aucun "cast" de malloc, ça sert à quoi ce cast ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
le cast, ça doit être pour éviter certains message du compilateur. Pour moi, dans ce cas là, ça ne sert à rien.

La console, c'est pas si méchant que ça. Tu verras on s'y met vite. C'est en tout cas plus facile que de configurer le debug sous code blocks.
0
Foreverson Messages postés 231 Date d'inscription   Statut Membre Dernière intervention   27
 
Apparemment, ça plantait à cause d'un dépassement dans un tableau d'une struct.
Ma boucle itérait 1 cran trop loin et le free ne marchait pas correctement.

Merci Char Snipeur d'avoir pris le temps de répondre
0