[C] problème avec libération de la mémoire

problème avec libération de la mémoire [C] - C - Programmation

Marsh Posté le 08-12-2004 à 18:37:25    

Bonjour,
 
J'utilise une chaine de caractères saisie au clavier par un utilisateur.
Je la prends en dynamique en faisant ça :
 

Code :
  1. s=NULL;
  2. j=0;
  3. while((c=getchar())!='\n')
  4. {
  5. s=(char *)realloc(s,(j+1)*sizeof(s));
  6. s[j]=c;
  7. j++;
  8. }
  9. s=(char *)realloc(s,(j+1)*sizeof(s));
  10. 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 :
 

Code :
  1. free(s);


 
 
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 :
  1. Program received signal SIGSEGV, Segmentation fault.
  2. 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
Reply

Marsh Posté le 08-12-2004 à 18:37:25   

Reply

Marsh Posté le 08-12-2004 à 18:43:03    

sizeof(s) ?

Reply

Marsh Posté le 08-12-2004 à 18:47:05    

Ca me renvoie bien un nombre d'octets supérieur à 0.

Reply

Marsh Posté le 08-12-2004 à 18:49:01    

sylsau> ca te renvoit pas tjrs le même nombre par hasard ?  
 
edit: nawak se que je dis  :D


Message édité par push le 08-12-2004 à 18:51:15
Reply

Marsh Posté le 08-12-2004 à 18:50:58    

non, mais ça c'est pas ça le problème, c'est juste que c'est bien beau de se palucher des cast en char* à la con, si après on alloue des char* et pas des char ..

Reply

Marsh Posté le 08-12-2004 à 18:54:32    

Ouais ça renvoie toujours 4 mais c'est normal ça.

Reply

Marsh Posté le 08-12-2004 à 18:55:22    

oui mais un char ca vaut 1  :D

Reply

Marsh Posté le 08-12-2004 à 18:59:51    

Taz a écrit :

non, mais ça c'est pas ça le problème, c'est juste que c'est bien beau de se palucher des cast en char* à la con, si après on alloue des char* et pas des char ..


 
Effectivement c'était ça l'erreur, je cherchais de partout dans mon code alors que c'était une erreur trop con en fait.
 
Merci beaucoup.

Reply

Marsh Posté le 08-12-2004 à 19:01:32    

Taz a écrit :

non, mais ça c'est pas ça le problème, c'est juste que c'est bien beau de se palucher des cast en char* à la con, si après on alloue des char* et pas des char ..


 
C'est juste pour savoir, y a une meilleure méthode pour allouer par exemple une chaine de caractères comme ici qu'en faisant un cast sur ce que renvoie la fonction d'allocation ?

Reply

Marsh Posté le 08-12-2004 à 19:02:51    

ne caste pas ce qui n'en as pas besoin

Reply

Marsh Posté le 08-12-2004 à 19:02:51   

Reply

Marsh Posté le 08-12-2004 à 19:08:23    

et dans quel cas je dois caster le retour d'une fonction d'allocation par exemple ?

Reply

Marsh Posté le 08-12-2004 à 19:16:29    

quand la conversion n'est pas implicite

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed