gpt4 book ai didi

C++,在for循环中分配空间,可能的内存泄漏验证

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:45 25 4
gpt4 key购买 nike

我只是好奇这段代码是否会造成多次内存泄漏,或者它是否会被正确清理。

Node *newNode;

for (int i = 0; i < 10; i++)
{
newNode = new Node();
}

delete newNode;

很明显代码没有做任何事情,但它确实帮助我解释了我的场景。我是否分配了 10 次内存以及何时删除留下 9 个孤儿的指针?或者我是否重新使用分配的相同空间并正确删除孤儿?提前致谢!

最佳答案

是的,这是内存泄漏。当你这样做时:

newNode = new Node();

您正在重新定义指针以指向新分配的内存,实际上失去了寻址先前指向的内存以删除它的方法。

因此,当您离开循环时,newNode 指针指向最后分配的(第十个)内存/Node。当您 delete newNode 时,您只会删除该内存。您不再有办法删除其他的。

正如 Zhi Wang 所指出的,您可以使用某种形式的智能指针(例如 C++11 中的 unique_ptrshared_ptr)。这些智能指针基本上是常规指针的包装器,它们具有防止此类泄漏的附加语义。如果您使用其中之一,当内存/对象超出范围时(在这种情况下 for 循环的当前迭代结束时),内存/对象将被自动释放。

但是,我认为这不会解决您在这种情况下的情况。我怀疑您是否想在创建 10 个对象后立即删除。相反,您可能希望将这些对象存储在像 std::vector 这样的容器中,或者至少有一个指针数组指向这些分配的实例中的每一个。这样你就会拥有周围的对象(我相信这是你想要的,因为你正在构建它们)并且还有一种方法可以在以后删除它们。

关于C++,在for循环中分配空间,可能的内存泄漏验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15400747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com