Problème avec une structure
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 :
Code:
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 |
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:
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); |
Cette fonction a pour but de lire un fichier .hex en entier et remplir la structure comme suit:
- 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 :
Code:
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 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:
1 2
| else if((fich->donnees = (unsigned char *)realloc(fich->donnees, sizeof(unsigned char) * nb)) == NULL)
printf("Erreur de realloc de fich->donnees"); |
le debugger retourne une erreur de :
Citation:
Program received signal SIGTRAP, Trace/breakpoint trap.
In _libmsvcrt_a_iname () ()
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 ?
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