首页 > 解决方案 > 内存被删除而不删除调用c ++

问题描述

我有一个函数可以创建一个新节点并将其放置在由指针链接的列表中的正确位置。但是,我进行了测试并在创建每个节点时打印了它的地址,并注意到它是相同的。我没有调用 delete 并且我正在使用 new 所以我想知道我的内存在哪里被删除了。我在“节点”上调用新的。此代码位于非 Node 类的类的方法中,但位于同一个 .h 文件中。

调用新的:

图片

内存位置:

图片

标签: c++pointerslinked-listnew-operatordelete-operator

解决方案


在您显示的代码中,N是一个局部变量,每次您进入和离开块时都会创建和销毁。它总是具有相同的地址也就不足为奇了。您的代码与此没有什么不同:

for (int i = 0; i < 10; ++i)
{
    int j = i;
    cout << "Value: " << j << " Location: " << &j << endl;
}

循环的每次迭代都会j在开始时创建一个新实例,并在结束时销毁该新实例。尽管每个j都有不同的值,但它们都可以生活在同一个地址,因为它们的生命周期不重叠。您可以看到您存储的值j无关紧要。因此,这可能还会显示不同的值但位置相同。

你的使用new是无关紧要的,因为你没有保存它给你的价值。你取消引用它并把它扔掉。


推荐阅读