xml*_*lmx 0 c++ memory-leaks raii visual-c++
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
struct A
{
A(char* p)
: p(p)
{}
~A()
{
delete this->p;
}
char* p;
};
int main()
{
A a(new char);
_CrtDumpMemoryLeaks();
}
Run Code Online (Sandbox Code Playgroud)
在调试模式下运行后,Visual Studio 2012的输出窗口显示:
Detected memory leaks!
Dumping objects ->
{142} normal block at 0x007395A8, 1 bytes long.
Data: < > CD
Object dump complete.
Run Code Online (Sandbox Code Playgroud)
原因是什么?
也许是在实际调用析构函数之前抛出内存泄漏?尝试:
int main()
{
{
A a(new char);
}
_CrtDumpMemoryLeaks();
}
Run Code Online (Sandbox Code Playgroud)
我建议使用标准的(或boost)智能指针类,例如unique_ptr或shared_ptr,而不是直接用原始指针处理new/delete.
编辑:
删除了设置指针的建议NULL,因为delete处理.
在析构函数有机会运行之前,即在块结束之前,您正在转储内存.试试这个,看看差异:
int main()
{
{
A a(new char);
}
_CrtDumpMemoryLeaks();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |