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