Possible en double:
Setting variable to NULL after free …Est-il toujours recommandé de définir des pointeurs sur NULL après les avoir libérés()?
J'apprends sur les pratiques de programmation bonne C et mon ami m'a dit de toujours définir les pointeurs NULL après libre() les (ou suivant l'appel d'une fonction de libération spécifique).
Par exemple:
char* ptr = malloc(100);
...
free(ptr);
ptr = NULL;
ou
struct graph* graph = create_graph();
...
destroy_graph(graph);
graph = NULL;
Pourquoi est-ce une bonne pratique?
Mise à jour: Après avoir lu les réponses, cela me semble une pratique horrible! Je cache des erreurs possibles de double-free(). Comment cela peut-il être une bonne pratique? Je suis choqué.
Merci, Boda Cydo.
@bodacydo Jetez un oeil aux questions "connexes" sur la droite de la page. –
Merci Neil et Michael. Cette question répond vraiment à ma question. Après avoir lu les réponses, j'ai une autre question: ne pas mettre le pointeur sur NULL cache-t-il des erreurs? Les doubles gratuits() ne sont plus détectés! Je suis maintenant confus car cela cache vraiment des erreurs de se montrer. – bodacydo
Comment ça? Libérer un pointeur et le définir sur NULL permet de libérer la mémoire. Si vous décidez alors de libérer NULL, vous devriez obtenir un assert ou un autre avertissement.La double libération de mémoire est beaucoup plus difficile à suivre que la libération de NULL. –