在 free() 后将指针设置为 NULL 总是一个好习惯吗? [复制]

2024-01-13

可能的重复:
释放后将变量设置为 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(使用前将#替换为@)

在 free() 后将指针设置为 NULL 总是一个好习惯吗? [复制] 的相关文章

随机推荐