相关疑难解决方法(0)

免费后将变量设置为NULL

在我的公司中,有一个编码规则,在释放任何内存后,将变量重置为NULL.例如 ...

void some_func () 
{
    int *nPtr;

    nPtr = malloc (100);

    free (nPtr);
    nPtr = NULL;

    return;
}
Run Code Online (Sandbox Code Playgroud)

我觉得,在上面显示的代码中,设置为NULL没有任何意义.或者我错过了什么?

如果在这种情况下没有任何意义,我将采用"质量团队"来删除此编码规则.请指教.

c malloc free coding-style heap-memory

146
推荐指数
11
解决办法
8万
查看次数

在释放它们之后真的应该将指针设置为"NULL"吗?

似乎有两个论点为什么人们应该NULL在释放它们之后设置指针.

双重释放指针时避免崩溃.

简短:free()不小心召唤第二次,当它被设置为时,不会崩溃NULL.

  • 几乎总是这掩盖了一个逻辑错误,因为没有理由free()第二次调用.让应用程序崩溃并能够修复它会更安全.

  • 它不能保证崩溃,因为有时在同一地址分配新内存.

  • 当有两个指向同一地址的指针时,主要发生双重自由.

逻辑错误也可能导致数据损坏.

避免重用已释放的指针

短:malloc()除非释放指针设置为,否则访问释放的指针可能会导致数据损坏,如果在同一位置分配内存NULL

  • NULL如果偏移足够大(someStruct->lastMember,theArray[someBigNumber]),则无法保证在访问指针时程序崩溃.而不是崩溃将导致数据损坏.

  • 将指针设置为NULL无法解决具有相同指针值的不同指针的问题.

问题

这是一篇反对NULL在释放后盲目设置指针的帖子.

  • 哪一个更难调试?
  • 是否有可能抓住两者?
  • 这种错误导致数据损坏而不是崩溃的可能性有多大?

随意扩展这个问题.

c free pointers

48
推荐指数
3
解决办法
3万
查看次数

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

可能重复:
释放后将变量设置为NULL ...

我正在学习优秀的C编程实践,我的朋友告诉我在free()之后总是将指针设置为NULL(或调用特定的释放函数).

例如:

char* ptr = malloc(100);
...
free(ptr);
ptr = NULL;
Run Code Online (Sandbox Code Playgroud)

要么

struct graph* graph = create_graph();
...
destroy_graph(graph);
graph = NULL;
Run Code Online (Sandbox Code Playgroud)

为什么这是一个好习惯?

更新:看完答案后,对我来说这似乎是一个糟糕的做法!我隐藏了可能的double-free()错误.这怎么可能是一个好的做法?我很震惊.

谢谢,Boda Cydo.

c memory free null

8
推荐指数
3
解决办法
2137
查看次数

标签 统计

c ×3

free ×3

coding-style ×1

heap-memory ×1

malloc ×1

memory ×1

null ×1

pointers ×1