gpt4 book ai didi

c++ - 为什么以下 C++ 代码中存在内存泄漏?

转载 作者:行者123 更新时间:2023-12-01 13:15:51 24 4
gpt4 key购买 nike

假设一个名为 的类维克存在一个名为 arr 的 vector 因为它只是成员。以下代码不会泄漏内存。 (这意味着我的 Vec 析构函数按预期工作。)

int main() {
Vec *obj = new Vec(5); // initializes a vector of size 5
delete obj;
}

但是,在下面的代码中,有 内存泄漏。但为什么?我好像有一个 delete每次使用 new .我错过了什么?

int main() {
Vec* obj;
obj = new Vec(5);

if (true) {
delete obj;
Vec* obj = new Vec(6);
}

delete obj;
}

PS:我使用 valgrind 检查了内存泄漏。

最佳答案

范围。
Vec* obj = new Vec(6);创建一个名为 obj 的新变量只存在于 if 中的 body 并隐藏 obj在外部范围。内部obj超出范围并在 if 的末尾消失的主体,将指向该新分配的最后一个指针带走。代码然后重新deleteobj在外部范围( not a good thing to do )。

解决方案:

int main() {
Vec* obj;
obj = new Vec(5);

if (true) {
delete obj;
obj = new Vec(6); // re-uses the original obj
}

delete obj;
}

关于c++ - 为什么以下 C++ 代码中存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200087/

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