假设存在一个名为Vec的类,并且有一个称为vector的向量,arr
因为它是其唯一成员。以下代码不会泄漏内存。(这意味着我的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
主体的末尾消失,最后一个指针指向该新分配。然后,该代码重新delete
S上obj
在外部范围(不是一件好事做)。
解:
int main() {
Vec* obj;
obj = new Vec(5);
if (true) {
delete obj;
obj = new Vec(6); // re-uses the original obj
}
delete obj;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句