36 votes

libérer un pointeur nul

Que se passe-t-il dans la mémoire si nous essayons de libérer un pointeur qui pointe vers NULL? Est-ce jamais valable?

Pourquoi n'affiche-t-il aucun message d'avertissement / d'erreur?

57voto

Prasoon Saurav Points 47488

De C99 section 7.20.3.2: La fonction libre

Synopsis

  1 #include <stdlib.h>
   void free(void *ptr);
 

La description

2 La fonction libre provoque la désallocation de l'espace pointé par ptr, c'est-à-dire qu'il est disponible pour une allocation ultérieure. Si ptr est un pointeur nul, aucune action ne se produit .

14voto

Martin B Points 14919

Depuis http://linux.die.net/man/3/malloc :

Si ptr est NULL, aucune opération n'est effectuée.

6voto

Pavunkumar Points 1945

libérer le pointeur nul n'aura aucun effet sur l'exécution.

5voto

Jonathan Leffler Points 299946

Une fois sur a très, très longtemps, il y avait des implémentations de " free()' qui s'est écrasé lors d'une de pointeur null gratuit. Cela s'applique uniquement à des implémentations avant la date de la C89 (C90) standard qui n'ont pas été modifiés pour traiter le problème depuis.

Dans mon expérience, il n'y a essentiellement aucune de ces implémentations de gauche (et ne doit pas être), de sorte qu'il est maintenant libre de pointeurs null.

Si vous avez des exigences, du port, très bizarre et anciens systèmes, alors peut-être que vous devriez toujours être prudent. D'autre part, si vous avez eu ces systèmes à s'inquiéter, que vous auriez probablement savoir à propos de la question (et de toute une série d'autres questions) - ou il y aurait quelques communal de connaissances dans le code qui indique ce.

5voto

edgar.holleis Points 2760

J'irais pour:

 #ifdef MY_DOUBTS_HAUNT_ME_IN_MY_DREAMS
    #define safe_free(x) do { if ((x)) free((x)); } while(0)
#elseif /* feeling gutsy */
    #define safe_free(x) free((x))
#endif
 

; - ||

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X