删除 NULL 指针内存

Deleting NULL pointer memory

我遇到了奇怪的、令人难以置信的问题。

我写了一个程序,其中的结构被重新分配了好几次。

指针初始为NULL,分配前检查是否NULL或删除

但是,我在这里犯了一个错误。 我是这样写的if (!pConfig) delete pConfig;,意思就是永远不删。 我以为进程会异常终止,但实际上,它永远不会因此而终止并造成内存泄漏。

伪代码如下:

Config *pConfig = NULL;

void func() {
    if (!pConfig) delete pConfig;   // <<<<    Old wrong Code
//  if (pConfig) delete pConfig;    // <<<<    Right Code

    pConfig = new Config;
}

我曾经知道删除 NULL 指针会使程序错误退出,多年来,因为我在大学里学到了。
但是从这个尴尬的事实来看,我已经糊涂了。

有人也帮我理解这个吗?谢谢。

Maybe it will be duplicated with Deleting a null pointer

是的,你这里有内存泄漏。内存泄漏是常见问题,但它们不会导致您的程序立即被杀死,有时当系统内存运行用完时,OS会杀死其他没有泄漏的程序,它们是受害者.

删除 NULL 指针总是安全的,它是来自 cpp 引用的duplicated. What you have learned is wrong. And you may also view the doc

对于现代c++,始终推荐使用smart pointers,我们不再手动删除指针,避免了大多数泄漏。