-
probleme avec fread
Salut à tous.
Je ne suis pas vraiment un débutant en C, mais j'ai un problème de "débutant".
C'est un soucis avec fread...
Je dois lire un fichier dont les 17 premiers octets contiennent l'en-tête et qqs informations.
Ensuite, les 25 245 000 autres contiennent les données.
Pas de problème pour lire l'entête. Par contre, les données, ca plante à tous les coups.
Je réserve un peu de mémoire :
Code:
Fichier->img=malloc(3*Fichier->width*Fichier->height);
(ca réserve donc un buffer de 25 245 000 octets et ça passe).
Ensuite, je fais mon fread :
Code:
fread(Fichier->img,1,3*Fichier->width*Fichier->height,fichier);
Et là, plusieurs choses peuvent se produire : Soit un plantage pur et simple signalé par window$, soit ça met trois plombes (bref, ça ne se termine pas).
Si jamais je demande de lire moins de 100 octets, ca passe sans soucis. Si je demande plus de 100, ça ne marche plus.
Vous avez une idée pour me débloquer ? Car je n'imagine pas lire 200 000 fois 100 octets.
Merci d'avance.
-
J'ai trouvé tout seul la solution. C'est vraiment une erreur de débutant : avant d'utiliser le pointeur, je n'ai pas fait attention à lui assigner la valeur NULL après l'avoir déclaré.
Le "soucis" est que, voulant trop bien faire, j'avais mis un malloc si le pointeur n'était pas NULL et un realloc sinon. Et comme le pointeur n'était pas toujours NULL, le realloc buggait.
Rien à voir donc avec le fread.
Ce qui m'a mis la puce à l'oreille, c'est quand j'ai changé de PC et que j'ai essayé de compiler sous linux. Il m'a signalé un warning avec le realloc (chose qui n'apparaissait pas sous windows avec mingw) et ensuite, quand je lançais le progamme, il me signalait une erreur de segmentation qui n'apparaissait pas sous windows.
Moralité : Vive Linux :)