Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1231 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°918200
sylsau
Posté le 08-12-2004 à 18:37:25  profilanswer
 

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
mood
Publicité
Posté le 08-12-2004 à 18:37:25  profilanswer
 

n°918205
Taz
bisounours-codeur
Posté le 08-12-2004 à 18:43:03  profilanswer
 

sizeof(s) ?

n°918210
sylsau
Posté le 08-12-2004 à 18:47:05  profilanswer
 

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

n°918211
push
/dev/random
Posté le 08-12-2004 à 18:49:01  profilanswer
 

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
n°918213
Taz
bisounours-codeur
Posté le 08-12-2004 à 18:50:58  profilanswer
 

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 ..

n°918216
sylsau
Posté le 08-12-2004 à 18:54:32  profilanswer
 

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

n°918218
push
/dev/random
Posté le 08-12-2004 à 18:55:22  profilanswer
 

oui mais un char ca vaut 1  :D

n°918225
sylsau
Posté le 08-12-2004 à 18:59:51  profilanswer
 

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.

n°918228
sylsau
Posté le 08-12-2004 à 19:01:32  profilanswer
 

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 ?

n°918232
Taz
bisounours-codeur
Posté le 08-12-2004 à 19:02:51  profilanswer
 

ne caste pas ce qui n'en as pas besoin

mood
Publicité
Posté le 08-12-2004 à 19:02:51  profilanswer
 

n°918238
sylsau
Posté le 08-12-2004 à 19:08:23  profilanswer
 

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

n°918244
Taz
bisounours-codeur
Posté le 08-12-2004 à 19:16:29  profilanswer
 

quand la conversion n'est pas implicite


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
[SQL] 2 Insert en 1 -> ProblèmeProblème avec fichier xml
Problème avec la taille d'un tableau [résolu]calque centré qui pose probleme
[OpenGL] Problême avec glDrawPixelsProbleme de concatenation
petit probleme avec une JAppletdébutant en VBA (petit probléme)
Comment fonctionne la memoire ?ASP CDO ....PROBLEME DE RETURN PATH
Plus de sujets relatifs à : [C] problème avec libération de la mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR