释放实例的函数struct Foo如下:
void DestroyFoo(Foo* foo)
{
if (foo) free(foo);
}
Run Code Online (Sandbox Code Playgroud)
我的一位同事建议如下:
void DestroyFoo(Foo** foo)
{
if (!(*foo)) return;
Foo *tmpFoo = *foo;
*foo = NULL; // prevents future concurrency problems
memset(tmpFoo, 0, sizeof(Foo)); // problems show up immediately if referred to free memory
free(tmpFoo);
}
Run Code Online (Sandbox Code Playgroud)
我看到NULL在释放后将指针设置为更好,但我不确定以下内容:
我们真的需要将指针分配给临时指针吗?它在并发性和共享内存方面有帮助吗?
将整个块设置为0以强制程序崩溃或至少输出具有显着差异的结果真的是一个好主意吗?