C++ Local 对象超出范围返回一个指针(使用 new 分配的内存)。内存泄漏因此
C++ Local object goes out of scope returning a pointer (memory allocated using new). Memory leak because of this
此函数中报告了内存泄漏。我不明白为什么这没有释放内存?
示例代码:
void Somefunction(){
Object1 * dangler = StaticClass::myFunc();
/*...
...some processing using dangler
...*/
delete dangler;
}
Object1* StaticClass::myFunc(){
LocalObj lc;
lc.another();
return lc.get();
}
Class lc{
Object1* m_dangler;
void another(){
m_danlger = new Object1();
}
Object1* get(){
return m_danlger;
}
}
这个 delete danlger;
不工作,我在 Object1 * dangler = StaticClass::myFunc();
看到内存泄漏
问题是:
1)为什么我的指针danlger
确实指向该位置却无法删除。
2) 如果这不是释放内存的正确方法,我哪里出错了,正确的方法是什么?
规则非常简单:每个 new
必须与delete
.
平衡
如果您的代码没有完全平衡这些,那么您有未定义的行为或内存泄漏。在你的情况下,逐行检查你的调试器是微不足道的。
lc
class 的一个问题是可以复制它(使用编译器生成的复制构造函数),这将浅复制指针成员。很难跟踪哪个对象(如果有的话)"owns" 由 another
.
分配的内存
您可以尝试完善此 class。但实际上,您也可以放弃整个事情并使用 std::unique_ptr
或 std::shared_ptr
来代替,具体取决于您的具体要求。那些 class 为您管理 delete
并且(除非您不正当使用它们)保证 new
和 delete
是平衡。
此函数中报告了内存泄漏。我不明白为什么这没有释放内存?
示例代码:
void Somefunction(){
Object1 * dangler = StaticClass::myFunc();
/*...
...some processing using dangler
...*/
delete dangler;
}
Object1* StaticClass::myFunc(){
LocalObj lc;
lc.another();
return lc.get();
}
Class lc{
Object1* m_dangler;
void another(){
m_danlger = new Object1();
}
Object1* get(){
return m_danlger;
}
}
这个 delete danlger;
不工作,我在 Object1 * dangler = StaticClass::myFunc();
问题是:
1)为什么我的指针danlger
确实指向该位置却无法删除。
2) 如果这不是释放内存的正确方法,我哪里出错了,正确的方法是什么?
规则非常简单:每个 new
必须与delete
.
如果您的代码没有完全平衡这些,那么您有未定义的行为或内存泄漏。在你的情况下,逐行检查你的调试器是微不足道的。
lc
class 的一个问题是可以复制它(使用编译器生成的复制构造函数),这将浅复制指针成员。很难跟踪哪个对象(如果有的话)"owns" 由 another
.
您可以尝试完善此 class。但实际上,您也可以放弃整个事情并使用 std::unique_ptr
或 std::shared_ptr
来代替,具体取决于您的具体要求。那些 class 为您管理 delete
并且(除非您不正当使用它们)保证 new
和 delete
是平衡。