J’essaie de lire une chaîne
char *ssortingng=malloc(sizeof(char)); char *start_ssortingng=ssortingng; //pointer to ssortingng start while ((readch=read(file, buffer, 4000))!=0){ // read filelen=filelen+readch; //ssortingng length for (d=0;d<readch;d++) *start_string++=buffer[d]; //append buffer to str realloc(string, filelen); //realloc with new length
parfois, il se bloque avec l’erreur suivante:
malloc: *** error for object 0x1001000e0: pointer being realloc'd was not allocated
mais parfois pas, je n’ai aucune idée de comment le réparer.
realloc()
ne met pas à jour le pointeur qui lui est transmis. Si realloc()
réussit, le pointeur transmis est free()
d et l’adresse de la mémoire allouée est renvoyée. Dans le code affiché, realloc()
tentera de free(ssortingng)
plusieurs fois, ce qui est un comportement non défini.
Stocker le résultat de realloc()
:
char* t = realloc(ssortingng, filelen); if (t) { ssortingng = t; }
L’adresse de la chaîne peut changer lorsque vous appelez realloc()
.
char *ssortingng=malloc(sizeof(char)); char *start_ssortingng=ssortingng; //pointer to ssortingng start while ((readch=read(file, buffer, 4000))!=0){ // read filelen=filelen+readch; //ssortingng length for (d=0;d