bab*_*rar 5 c++ memory-leaks c++11
假设存在一个名为Vec的类,其中有一个称为 vector的类,arr因为它是唯一的 member 。以下代码不会泄漏内存。(这意味着我的 Vec 析构函数按预期工作。)
int main() {
Vec *obj = new Vec(5); // initializes a vector of size 5
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
然而,在下面的代码,有是内存泄漏。但为什么?我似乎delete每次使用new. 我错过了什么?
int main() {
Vec* obj;
obj = new Vec(5);
if (true) {
delete obj;
Vec* obj = new Vec(6);
}
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
PS:我使用 valgrind 检查了内存泄漏。
use*_*301 10
范围。
Vec* obj = new Vec(6);生成一个新变量obj,该变量只存在于if的主体内,并obj在外部作用域隐藏。内部obj 超出范围并在if主体的末尾消失,并带走指向新分配的最后一个指针。然后,该代码重新deleteS上obj在外部范围(不是一件好事做)。
解决方案:
int main() {
Vec* obj;
obj = new Vec(5);
if (true) {
delete obj;
obj = new Vec(6); // re-uses the original obj
}
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |