Alors cette fois je n'y comprend plus rien !
J'ai donc remplacé les caractère NULL par des ! et ça a très bien marché. J'ai pû m'apercevoir quand dans le BLOC ou je place le texte que c'était bourré de caractère NULL ce qui est normal puisque je calcule juste le nombre de caractère maximum par ligne et donc quand il reste plus que 3 caractères sur la dernière ligne, le reste est vide (remplit de caractère NULL)
Mais alors kepire c'est le BLOC ou je stoque les paramètres : la moitié est remplit de caractère NULL.
Avec ma fonction j'alloue de la mémoire pour la taille des paramètres c'est à dire sizeof(Str_Mode), mais je crois que les 3/4 sont des pointeurs : ils pointent vers les structures qui contiennent les paramètres définit par l'utilisateur. Donc ce sont presque tous des pointeurs : ça peux expliquer que les 6 ocets ne sont pas remplit ?
Alors voilà cr que je fais habituellement :
temp_param=Document[nb_str].File.Text.param=ALLOC_MEM(sizeof(Str_Mode));
Et curieusement quand j'alloue un octet de plus comme ceci et bien ça plante !
temp_param=Document[nb_str].File.Text.param=ALLOC_MEM(sizeof(Str_Mode+1));
Voici ma fonction en question :
}
void *BLOC[64];
void *BLOC_p=BLOC[0]=malloc(1024);
short mem_avaible=1024;
short nb_ko=1;
memset(BLOC_p,0,1024);
void *ALLOC_MEM(short mem_to_alloc)
{
if(mem_avaible<(signed)mem_to_alloc)
{
/*
FILE *File=fopen("aemlpe","w");
short i=0;
unsigned char *str = BLOC[0];
for(i=0;i<1024;i++)
{
unsigned char c = str[i];
if(c=='\0')
c='!';
fputc(c,File);
}
fclose(File);*/
BLOC[nb_ko]=malloc(1024);
BLOC_p = BLOC[nb_ko];
memset(BLOC_p,0,1024);
nb_ko++;
mem_avaible=1024;
}
mem_avaible = mem_avaible - mem_to_alloc;
void *sav = BLOC_p;
BLOC_p=BLOC_p+mem_to_alloc;
return sav;
Je ne savais pas que c'était si compliqué de faire de l'allocation dynamique par BLOC : c'est quasiment "indébugable".
Y a-til quelqu'un qui utilise cette méthode dans un programme sans problème ?