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

  FORUM HardWare.fr
  Programmation
  C

  Apres "free(a)", ca pointe toujours vers les données

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Apres "free(a)", ca pointe toujours vers les données

n°2199692
doublebeur​re
Posté le 08-08-2013 à 10:38:41  profilanswer
 

J'ai du mal à comprendre pourquoi un pointeur vers une structure que j'ai définie et créée avec malloc(), pointe toujours vers des données aprés avoir utilisé free():
 

Code :
  1. struct myS {
  2.         int nb;
  3.         char *name;
  4. };
  5. struct myS *a = (struct myS*)malloc(sizeof(struct myS));
  6. a->nb=5;
  7. a->name="Blabla";
  8. printf("Avant free: %d - %s \n", a->nb, a->name); // "Avant free: 5 - Blabla"
  9. free(a);
  10. printf("Apres free: %d - %s \n", a->nb, a->name); // "Apres free: 0 - Blabla"


 
Si ma structure ne contient que des int ca marche, par contre le char* reste et n'est pas réinitialisé...  [:cerveau dr:1]

mood
Publicité
Posté le 08-08-2013 à 10:38:41  profilanswer
 

n°2199693
theshockwa​ve
I work at a firm named Koslow
Posté le 08-08-2013 à 10:59:33  profilanswer
 

C'est un comportement indéfini. Tu utilises de la mémoire qui n'est plus allouée, tu n'as pas de garantie sur ce qu'elle peut contenir, donc ca peut te donner n'importe quel comportement, y compris quelque chose qui semble parfois valide ou presque.


Message édité par theshockwave le 08-08-2013 à 10:59:50

---------------
last.fm
n°2199699
doublebeur​re
Posté le 08-08-2013 à 11:58:16  profilanswer
 

Ok merci. ;)

n°2199704
Farian
Posté le 08-08-2013 à 13:19:00  profilanswer
 

Notons au passage que la modification du contenu de la mémoire après un "free" peut être vue comme une perte de temps (il suffit simplement de marquer la zone comme disponible pour le système), et ce n'est donc pas choquant que le système s'autorise à ne rien faire, ou à avoir un comportement différent en "débug" ou en "release", comme c'est le cas avec Visual C++, sauf erreur de ma part (idem lors de l'allocation, d'ailleurs).
 


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

  Apres "free(a)", ca pointe toujours vers les données

 

Sujets relatifs
Aide pourde la gestion de base de données sans AccesMacro VBA pour copier/coller d'EXCEL vers fichier txt
Fonction VBA/Excel : récupérer les données d'un classeurSupprimer plusieurs membres de ma base de données
[PHP/JS]Passage de valeurs php vers une fonction JSmise à jour d'une table de base de données
code php de convertisseur vers pdfComment charger une image d'une base de données
Charger une image stockée dans une base de donnéesmon code "modifier" en php supprime les données au lieu de modifier
Plus de sujets relatifs à : Apres "free(a)", ca pointe toujours vers les données


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