déolé si ça parait indigeste mais comme je vois pas du tout d'où vient le problème, j'ai inclu une bonne partie de code.
J'ai des fread qui se mettent à planter au bout de plusieurs appels alors que le flux entrain d'être lu est valide. Je m'expliqe:
avant j'avais: (et ça marchait nickel)
.... beaucoup de code
int load_units(FILE *fp){
int i;
fread(&ul,sizeof(int),1,fp);
up = (unit *)malloc_throw(ul * sizeof(unit));
fread(up,sizeof(unit),ul,fp);
for(i=0;i<ul;i++){
up[i].sprite_light = (unsigned short *)malloc_throw(16 * sizeof(unsigned short));
up[i].sprite_dark = (unsigned short *)malloc_throw(16 * sizeof(unsigned short));
up[i].sprite_mask = (unsigned short *)malloc_throw(16 * sizeof(unsigned short));
fread(up[i].sprite_light,sizeof(unsigned short),16,fp);
fread(up[i].sprite_dark,sizeof(unsigned short),16,fp);
fread(up[i].sprite_mask,sizeof(unsigned short),16,fp);
up[i].name = (char *)malloc_throw(30 * sizeof(char));
if(up[i].name_length){
fread(up[i].name,sizeof(char),up[i].name_length,fp);
}
}
return 1;
}
beaucoup de code
maintenant j'ai (et ça marche plus)
...
void malloc_masked_sprite(unsigned short *l, unsigned short *d, unsigned short *m){
if((l = (unsigned short *)malloc_throw(16 * sizeof(unsigned short)))==NULL)
printf("malloc l masked_sprite error");
if((d = (unsigned short *)malloc_throw(16 * sizeof(unsigned short)))==NULL)
printf("malloc d masked_sprite error");
if((m = (unsigned short *)malloc_throw(16 * sizeof(unsigned short)))==NULL)
printf("malloc m masked_sprite error");
}
...
void fread_masked_sprite(unsigned short *l, unsigned short *d, unsigned short *m, FILE *fp){
unsigned short i;
if((i=fread(l, sizeof(unsigned short), 16, fp))<16)
printf("\nfread (l) masked_sprite error %d<16",i);
if((i=fread(d, sizeof(unsigned short), 16, fp))<16)
printf("\nfread (d) masked_sprite error %d<16",i);
if((i=fread(m, sizeof(unsigned short), 16, fp))<16)
printf("\nfread (m) masked_sprite error %d<16",i);
}
...
int load_units(FILE *fp){
int i;
fread(&ul,sizeof(int),1,fp);
printf("\n<ul: %d>",ul);
up = (unit *)malloc_throw(ul * sizeof(unit));
fread(up,sizeof(unit),ul,fp);
for(i=0;i<ul;i++){
malloc_masked_sprite(up[i].sprite_light, up[i].sprite_dark, up[i].sprite_mask);
fread_masked_sprite(up[i].sprite_light, up[i].sprite_dark, up[i].sprite_mask, fp);
up[i].name = (char *)malloc_throw(30 * sizeof(char));
if(up[i].name_length){
fread(up[i].name,sizeof(char),up[i].name_length,fp);
}
printf("\n{%d : %s(%d)}",i,up[i].name,up[i].name_length);ngetchx();
}
return 1;
}
...
Si on regarde bien, ce code est exactement supposé faire la même chose que le précédent mais au bout de 9 ou 10 appels à la fonction fread_masked_sprite() les fread commencent à foirer. (y'en a un qui return 5 et tous les suiuvants retournent 0)
Pourtant, le fichier auquel je tente d'accéder est le même qu'avec l'ancien code.
J'ai passé 2 heures à essayer de comprendre ce qui n'allait pas mais ça n'a rien donnée.
Si vous avez une idée elle est bienvenue
--
dionoea