Bonjour,
J'utilise une chaine de caractères saisie au clavier par un utilisateur.
Je la prends en dynamique en faisant ça :
Code :
- s=NULL;
- j=0;
- while((c=getchar())!='\n')
- {
- s=(char *)realloc(s,(j+1)*sizeof(s));
- s[j]=c;
- j++;
- }
- s=(char *)realloc(s,(j+1)*sizeof(s));
- s[j]='\0';
|
A la fin du programme (entre temps je ne modifie pas la chaine de caractères s, je ne fais que lire son contenu) je veux donc libérer la mémoire allouée pour cette chaine de caractères, j'utilise donc :
Ca marche dans la plupart des cas, mais quelques fois ça m'affiche un : segmentation fault. J'ai utilisée gdb pour en savoir plus et ça me marque :
Code :
- Program received signal SIGSEGV, Segmentation fault.
- 0x4008ab59 in mallopt () from /lib/tls/libc.so.6
|
Sans le free(s), je n'ai plus le segmentation fault, donc ça doit venir de là.
Je vois pas trop ce que ça peut être à part une mauvaise allocation de la chaine ? mais dans ce cas là je ne sais pas trop ce que je dois arranger.
Pourriez vous me donner des indications si vous voyez d'où ça peut venir par rapport à ce que dit gdb.
Merci d'avance.
Message édité par sylsau le 08-12-2004 à 18:37:50