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

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

Marsh Posté le 08-08-2013 à 10:38:41    

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]

Reply

Marsh Posté le 08-08-2013 à 10:38:41   

Reply

Marsh Posté le 08-08-2013 à 10:59:33    

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
Reply

Marsh Posté le 08-08-2013 à 11:58:16    

Ok merci. ;)

Reply

Marsh Posté le 08-08-2013 à 13:19:00    

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

Reply

Sujets relatifs:

Leave a Replay

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