在删除之前清空指针是否会导致内存泄漏

Does Nulling a pointer before delete gives memory leak?

本文关键字:内存 泄漏 是否 空指针 删除 清空      更新时间:2023-10-16
int *p = new int;
p = NULL;
delete p;

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

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

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

您通常希望在删除后将 p NULL 设为 NULL,主要是为了防止双重删除,但这不是必需的。但是,删除 NULL 指针没有不良影响。

指针

只是一个指向内存某个地址的值 - 指针不是(!(分配的内存!因此,有一个新的将要求一些分配器保留一定量的内存并返回地址。删除操作将要求同一分配器释放该内存。将指针设置为零(删除之前(会破坏它并导致内存泄漏。

首先,删除 C++ 中的 NULL 指针实际上是"未完成任何工作"。它也不会给出任何错误,有时可能会给您一种错觉,即 NULL 指针已成功删除。

其次,由于指针 p 指向的地址,比如说 1000(内存地址值(,除了这个指针之外没有其他人来识别它,现在您已经更改了这个唯一的识别器 1000 并将其设置为 NULL,发生的事情是这个 1000 已经获得了内存空间,但现在无法删除,因为"如果我不这样做,我怎么能删除某些东西甚至知道它在哪里"。因此,这是内存泄漏。