相关疑难解决方法(0)

这是一个释放记忆的好方法吗?

释放实例的函数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在释放后将指针设置为更好,但我不确定以下内容:

  1. 我们真的需要将指针分配给临时指针吗?它在并发性和共享内存方面有帮助吗?

  2. 将整个块设置为0以强制程序崩溃或至少输出具有显着差异的结果真的是一个好主意吗?

c memory free

55
推荐指数
2
解决办法
3848
查看次数

标签 统计

c ×1

free ×1

memory ×1