删除 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,我们不再手动删除指针,避免了大多数泄漏。
我遇到了奇怪的、令人难以置信的问题。
我写了一个程序,其中的结构被重新分配了好几次。
指针初始为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,我们不再手动删除指针,避免了大多数泄漏。