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

  FORUM HardWare.fr
  Programmation
  C

  free qui debloque

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

free qui debloque

n°1411750
sundevil
Posté le 23-07-2006 à 15:35:53  profilanswer
 

Bonjour,
 
Voila je vient d'ecrire une fonction toute simple pour un programme C et sa seg fault.
 
Donc jai utiliser gdb pour savoir se qui se passait et gdb me dit:
 
Program received signal SIGSEGV, Segmentation fault.
0x400bec1b in free () from /lib/libc.so.6
 
free() qui seg fault  :??: cest bien la premiere fois que sa me le fait.
 
voila ma fonction (strdup mais qui copie que n caractere de la chaine de depart)
 
char    *strndup(char *str, int n)
{
  int   i;
  int   max;
  char  *new;
 
  if (!str)
    return (NULL);
  max = (n > strlen(str)) ? (strlen(str)) : (n);
  if (!(new = malloc((max + 1) * sizeof(*new))))
    return (NULL);
  for (i = 0; i < max; i++)
    new[i] = str[i];
  new[i] = '\0';
  return (new);
}
 
et apres je fait un free(str); dans apres l'apel a cette fonction et la seg fault.
 
Jai beau regarder ma fonction je voit pas l'erreur.
 
Si quelqu'un a une idee merci.

mood
Publicité
Posté le 23-07-2006 à 15:35:53  profilanswer
 

n°1411785
SBAM
Best recording of rach 3.
Posté le 23-07-2006 à 17:32:09  profilanswer
 

Peut-etre parcque l'erreur n'est pas dans ta fonction http://forum-images.hardware.fr/icones/message/icon10.gif

n°1411795
joneal
Posté le 23-07-2006 à 18:38:51  profilanswer
 

et en remplacant  
 
if (!(new = malloc((max + 1) * sizeof(*new))))  
 
par  
 
if (!(new = malloc((max + 1) * sizeof(char)))  
 
cela donne quoi ?

n°1411801
Trap D
Posté le 23-07-2006 à 19:03:39  profilanswer
 

Approfondis la remarque de SBAM.

n°1411812
Elmoricq
Modérateur
Posté le 23-07-2006 à 19:26:53  profilanswer
 

+1
 
Je demande à voir l'initialisation de str [:doc petrus]


Message édité par Elmoricq le 23-07-2006 à 19:27:01
n°1411820
sundevil
Posté le 23-07-2006 à 20:04:10  profilanswer
 

str = NULL ;) sinon, rassurer moi juste sur le faite que free sa peut pas seg fault et apres jpense que je vai finir par trouver

n°1411825
Elmoricq
Modérateur
Posté le 23-07-2006 à 20:22:28  profilanswer
 

En règle générale, la probabilité qu'une fonction de la libc soit buggée par rapport au code que l'on écrit est trèèèès faible.
 
Et je demandais surtout le type et la façon dont tu initialisais str avant de passer le paramètre à la fonction. :o


Message édité par Elmoricq le 23-07-2006 à 20:23:08
n°1411843
sundevil
Posté le 23-07-2006 à 20:46:50  profilanswer
 

de toute maniere, si j'envoie par hasard une mauvaise adresse a free, il me pete un warning mais il seg fault pas normalement, non ???

n°1411863
Trap D
Posté le 23-07-2006 à 21:23:14  profilanswer
 

La programmation en C ne doit jamais être du "par hasard" !
Tu dois ABSOLUMENT donner à free l'adresse allouée par malloc/realloc

n°1411867
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-07-2006 à 21:30:55  profilanswer
 

sundevil a écrit :

de toute maniere, si j'envoie par hasard une mauvaise adresse a free<...>


Comportement indéterminé. Tout peut arriver.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 23-07-2006 à 21:30:55  profilanswer
 

n°1411868
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-07-2006 à 21:32:33  profilanswer
 

joneal a écrit :

et en remplacant  
 
if (!(new = malloc((max + 1) * sizeof(*new))))  
 
par  
 
if (!(new = malloc((max + 1) * sizeof(char)))  
 
cela donne quoi ?


Pareil. Ne pas critiquer du code qu'on ne comprend pas. Plutôt demander une explication...
 
http://mapage.noos.fr/emdel/notes.htm#malloc


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1411871
el muchach​o
Comfortably Numb
Posté le 23-07-2006 à 21:33:29  profilanswer
 

sundevil a écrit :

de toute maniere, si j'envoie par hasard une mauvaise adresse a free, il me pete un warning mais il seg fault pas normalement, non ???


Ah non, free ne "pète pas un warning", non.[:petrus75]


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1411875
sundevil
Posté le 23-07-2006 à 21:45:14  profilanswer
 

ok bon, bah je vais continuer a chercher.

n°1411878
el muchach​o
Comfortably Numb
Posté le 23-07-2006 à 21:49:32  profilanswer
 

+1 avec SBAM, ton code a l'air correct (bien que pas vraiment optimisé et un peu moche, mais c'est un autre pb), cherche ailleurs dans ton code, notamment partout où str est utilisé entre ton strndup et ton free.


Message édité par el muchacho le 23-07-2006 à 21:51:56

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1411892
Trap D
Posté le 23-07-2006 à 22:07:33  profilanswer
 

Comment appelles-tu strndup ?  
Tu fais bien un free du pointeur retourné par strndup, pas du premier argument fourni à strndup ?

n°1411907
sundevil
Posté le 23-07-2006 à 22:33:14  profilanswer
 

ouai je fait un free du retour de strndup

n°1411909
Trap D
Posté le 23-07-2006 à 22:39:04  profilanswer
 

Tu as l'air d'avoir un comportement indéterminé dû sans doute à un dépassement de taille d'une variable, tableau, chaîne de caractères, pas facile à trouver sans bout de code.


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

  free qui debloque

 

Sujets relatifs
nbr de site perso possible chez FreeCoppermine Photo Gallery chez Free
Extensions, PHP et FreeWarning: is_file() [function.is-file]: Unable to access /var/www/free
passage par adresse, malloc et free.Ouverture en PHP de fichiers > 5 Mo chez FREE.
Problème d'hébergement chez Free [Résolu]pb de base de données à free
Script equivalent a dl.free.fr[hebergement free] - Ralentissements- gêles
Plus de sujets relatifs à : free qui debloque


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