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?
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?
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 .
Depuis http://linux.die.net/man/3/malloc :
Si ptr est NULL, aucune opération n'est effectuée.
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.
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.