可能的重复:
释放后将变量设置为 NULL ... https://stackoverflow.com/questions/1025589/setting-variable-to-null-after-free
我正在学习良好的 C 编程实践,我的朋友告诉我在 free() 后(或调用特定的释放函数)始终将指针设置为 NULL。
例如:
char* ptr = malloc(100);
...
free(ptr);
ptr = NULL;
or
struct graph* graph = create_graph();
...
destroy_graph(graph);
graph = NULL;
为什么这是一个好的做法?
更新:读完答案后,这对我来说似乎是一种糟糕的做法!我隐藏了可能的 double-free() 错误。这怎么可能是一个好的做法呢?我很震惊。
谢谢,博达·西多。
虽然它不会造成伤害,但并不总是有帮助。要考虑的问题是,很容易存在指针的多个副本,并且很可能您只会将一个副本设置为 NULL。它根本没有帮助的经典例子是:
void free_graph(graph *g)
{
...
free(g);
g = NULL; // not useful in this context
}
这里的问题是您只设置本地指针free_graph
为 NULL 并且指针由调用者持有free_graph
仍将具有其原始价值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)