删除前删除指针是否会导致内存泄漏?

时间:2013-12-13 18:13:22

标签: c++

int *p = new int;

p = NULL;

delete p;

这是内存泄漏???因为指针p指向的内存位置没有被释放,它只是已经为NULL的指针,当我们删除它时,它不会腾出那个内存位置。是这样吗?

4 个答案:

答案 0 :(得分:7)

是的,确实如此。是的,就是这样。需要更多角色!

答案 1 :(得分:3)

您将获得内存泄漏的原因是p将不再指向您要删除的对象。

您通常希望在删除后使p为NULL,这主要是为了保护双重删除,但这不是必需的。但是,删除NULL指针没有任何不良影响。

答案 2 :(得分:2)

指针只是指向某个内存地址的值 - 指针不是(!)分配的内存!因此,有一个新的将要求一些分配器保留一些内存并返回地址。删除将要求相同的分配器释放该内存。将指针设置为零(删除前)会使其失败并导致内存泄漏。

答案 3 :(得分:0)

首先,删除C ++中的NULL指针实际上并没有完成工作'。它也没有给出任何错误,这有时可能会让你觉得NULL指针被成功删除了。

其次,既然指针p所指向的地址,就说1000(内存地址值),除了这个非常指针识别它之外没有其他人,现在你已经改变了这个只有1000的识别器并将其设置为NULL,发生的事情是这1000已经获得了一个内存空间,但现在无法删除为"如果我甚至不知道它在哪里,我该怎么删除?"。因此它是一个内存泄漏。