Ne free(ptr) où ptr est NULLE corruption de la mémoire?

Théoriquement je peux dire que

free(ptr);
free(ptr); 

est une corruption de la mémoire puisque nous sommes libérer la mémoire qui a déjà été libérée.

Mais que faire si

free(ptr);
ptr=NULL;
free(ptr); 

Que l'OS va se comporter d'une manière indéfinie, je ne peut pas obtenir une réelle analyse théorique de cette sur ce qui se passe.
Tout ce que je fais, est-ce une corruption de mémoire ou pas?

Est de libérer un pointeur NULL est-il valide?

  • pas sûr au sujet de C gratuit standard, mais en C++ supprimer(NULL) est parfaitement valide, donc je suppose que free(NULL) doit l'être également.
  • delete NULL n'est pas valide en C++. suppression peut être appliquée à de pointeur null valeurs de type de béton, mais de ne pas NULL. delete (int*) NULL est légal, mais pas delete NULL.
  • donc, cela signifie que si un pointeur pointe vers NULL gratuit ne pas effectuer quoi que ce soit.est-ce à dire!!!!!! chaque fois, dans notre codage si souhaitez libérer de la mémoire peut tout simplement remplacer un free(ptr) avec ptr=NULL?
  • Pas de. Si ptr points à la mémoire, et vous n'appelez pas free, la mémoire de la fuite. Le paramètre NULL perd tout votre poignée sur la mémoire, et les fuites. Si le ptr arrive à être NULL, appelant free est un non-exploitation.
  • Hein? De ce fait à vous de conclure que l'on peut remplacer free(ptr) avec ptr = NULL. Personne n'a dit quoi que ce soit.
  • gratuit ne signifie pas libre de la variable passée dans, il libère un bloc de mémoire précédemment alloués et référencé par le pointeur de la valeur dans la valeur transmis. Donc, ptr n'est pas libéré, le bloc pointé par ptr est libéré.
  • Dupliquer: stackoverflow.com/questions/1879550/...

InformationsquelleAutor Vijay | 2009-12-21