int *p = new int;
p = NULL;
delete p;
这是内存泄漏???因为指针p指向的内存位置没有被释放,它只是已经为NULL的指针,当我们删除它时,它不会腾出那个内存位置。是这样吗?
答案 0 :(得分:7)
是的,确实如此。是的,就是这样。需要更多角色!
答案 1 :(得分:3)
您将获得内存泄漏的原因是p
将不再指向您要删除的对象。
您通常希望在删除后使p
为NULL,这主要是为了保护双重删除,但这不是必需的。但是,删除NULL指针没有任何不良影响。
答案 2 :(得分:2)
指针只是指向某个内存地址的值 - 指针不是(!)分配的内存!因此,有一个新的将要求一些分配器保留一些内存并返回地址。删除将要求相同的分配器释放该内存。将指针设置为零(删除前)会使其失败并导致内存泄漏。
答案 3 :(得分:0)
首先,删除C ++中的NULL指针实际上并没有完成工作'。它也没有给出任何错误,这有时可能会让你觉得NULL指针被成功删除了。
其次,既然指针p所指向的地址,就说1000(内存地址值),除了这个非常指针识别它之外没有其他人,现在你已经改变了这个只有1000的识别器并将其设置为NULL,发生的事情是这1000已经获得了一个内存空间,但现在无法删除为"如果我甚至不知道它在哪里,我该怎么删除?"。因此它是一个内存泄漏。