假设存在一个名为的类Vec 作为唯一成员存在一个带有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
的主体内,并且将obj
隐藏在外部作用域中。内部obj
超出范围,并在if
主体的末尾消失,并带有指向该新分配的最后一个指针。然后,代码在外部范围(not a good thing to do)上将delete
重新编码为obj
。
解决方案:
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/