C++本地对象超出范围,返回指针(使用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
类的一个问题是,可以复制它(使用编译器生成的复制构造函数),这将浅层复制指针成员。很难跟踪哪个对象(如果有的话)"拥有"another
分配的内存。
你可以试着改进这门课。但实际上,根据您的具体要求,您还可以放弃整个功能,转而使用std::unique_ptr
或std::shared_ptr
。这些类为您管理delete
,并且(除非您反常地使用它们)保证new
s和delete
s是平衡的。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配