Duplicar posible:
Setting variable to NULL after free …¿Es siempre una buena práctica establecer punteros a NULL después de liberarlos()?
estoy aprendiendo acerca de las buenas prácticas de programación C y mi amigo me dijo que siempre para configurar los punteros a NULL después de liberación() ing ellos (o llamar a un función de liberación específica).
Por ejemplo:
char* ptr = malloc(100);
...
free(ptr);
ptr = NULL;
o
struct graph* graph = create_graph();
...
destroy_graph(graph);
graph = NULL;
Por qué es una buena práctica?
Actualización: ¡Después de leer las respuestas, me parece una práctica horrible! Estoy ocultando posibles errores double-free(). ¿Cómo puede ser esta una buena práctica? Estoy impactado.
Gracias, Boda Cydo.
@bodacydo Eche un vistazo a las preguntas "relacionadas" a la derecha de la página. –
Gracias Neil y Michael. Esa pregunta realmente responde mi pregunta. Después de leer las respuestas, tengo otra pregunta: ¿no ocultar los punteros a NULL realmente oculta los errores? Double free() ya no se detecta! Ahora estoy confundido, ya que esto realmente oculta los errores para aparecer. – bodacydo
¿Cómo es eso? Liberar un puntero y establecerlo en NULL permite liberar la memoria. Si luego decides liberar NULL, deberías obtener una afirmación o alguna otra advertencia.La memoria de doble liberación es mucho más difícil de rastrear que la liberación de NULL. –