Bonjours à tous,
Je m'essaye en ce moment à la lecture des fichiers au format intel Hex (.hex produits par les compilateurs pour microcontroleur, par exemple) et je rencontre quelques problèmes. Je m'en remets donc à vos expériences.
Dans mon programme ,je définis une structure puis un pointeur du type de cette structure :
Au tout début de ce programme, je déclare le pointeur "hex" de type pHEX que j'alloue via un malloc et que je passe en argument à la fonction qui pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef struct { unsigned char *donnees; // Pointeur sur les données contenu dans le fichier unsigned long *erreurs; // Pointeur sur les n° de ligne ayant une erreur unsigned long errs_chksum; // Nombre d'erreurs contenues dans le champ précédent }HEX; typedef HEX *pHEX; // Pointeur de type HEX
Cette fonction a pour but de lire un fichier .hex en entier et remplir la structure comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pHEX hex; hex = (pHEX)malloc(sizeof(HEX)); lire_hex("D:\\Documents and Settings\\Administrateur\\Mes documents\\prog\\intel\\main.hex", hex);
- le champ donnees reçoit les données contenues dans le fichier
- le champ erreurs reçoit les numéros de ligne où il y a des erreurs de checksum
- le champ errs_chksum reçoit le nombre d'erreur de checksum
Je vous mets les parties de la fonction lire_hex qui posent problème :
Le programme s'exécute mais n'affiche rien (pourtant ma fonction d'affichage fonctionne) et retourne une valeur d'erreur incompréhensible, du coup je passe en debug. Là, au premier tour de la boucle tout se passe bien mais au second tour à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 void lire_hex(char chemin[512], pHEX fich){ FILE *fichier; int exist = 0; n = 0; fich->errs_chksum = 0; if((fichier = fopen(chemin,"rb")) == NULL) printf("Erreur d'ouverture du fichier\n"); else{ do{ ...... if(!exist){ if( ( fich->donnees = (unsigned char *)malloc(sizeof(unsigned char) * nb) ) == NULL) printf("Erreur de malloc pour fich->donnees"); exist = 1; } else if((fich->donnees = (unsigned char *)realloc(fich->donnees, sizeof(unsigned char) * nb)) == NULL) printf("Erreur de realloc de fich->donnees"); ........ } else verrou = 1; }while(!verrou); fclose(fichier); } }
le debugger retourne une erreur de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 else if((fich->donnees = (unsigned char *)realloc(fich->donnees, sizeof(unsigned char) * nb)) == NULL) printf("Erreur de realloc de fich->donnees");
Je ne comprends pas pourquoi j'ai cette erreur. Y a-t-il une erreur dans mon code ? ou est-ce un bug dû à mes outils de dev ?Program received signal SIGTRAP, Trace/breakpoint trap.
In _libmsvcrt_a_iname () ()
Je travaille sous CodeBlocks avec Mingw et gdb. Je suis pas un gourou en C donc j'utilise peut-être mal l'allocation de mémoire à une structure.
Désolé d'être aussi long et merci pour l'aide que vous pourrez m'apporter.
Titux
Partager