跟踪内存泄漏
Tracking memory leak
情况:
我看到大约+ 120kbytes增加时关闭类,因此,当我关闭类几次时,内存会增加-我需要找出导致这种情况的原因。
只是在寻找任何好的技巧或技巧,如何找到什么是不释放/发布与vstudio 2010 -任何想法?
这是我做的更清楚(非常简化)
class cSomeClass
{
cSomeClass();
~cSomeClass();
int Initialize();
void Deinitialize();
}
cSomeClass cCamera;
main()
{
Sleep(10000);
// Do Init / Deinit to find out if we are freeing the memory
while(1)
{
// Init camera
if(cCamera.Initialize()==0)
{
// Rest for a while
Sleep(1500);
cCamera.Deinitialize();
// Rest for a while
Sleep(1500);
}
}
}
我只是做了一个小的应用程序来init/deinit类对象看看在"任务管理器",如果我的这个应用程序的内存返回到它的起始值-但它不是,它保持递增每次我初始化cSomeClass -所以我相信我有一些东西被初始化,但不释放在Deinitialize。
更新:我不认为这是一个简单的内存增长,当应用程序启动时,它会在10秒后稳定下来,让我们说:1MB ram,然后当while(1)在每次Initialize I调用中启动时,我在整个应用程序内存中获得+120kBytes(在任务管理器中检查)。
更新:Thanks to Chad - get its sniff with
_CrtDumpMemoryLeaks
Detected memory leaks!
Dumping objects ->
{76} normal block at 0x003F4BC8, 32 bytes long.
Data: <Logitech QuickCa> 4C 6F 67 69 74 65 63 68 20 51 75 69 63 6B 43 61
{75} normal block at 0x003F4B80, 8 bytes long.
Data: < K? > 20 4B 3F 00 00 00 00 00
{74} normal block at 0x003F4B20, 32 bytes long.
Data: < K? K? > 80 4B 3F 00 C8 4B 3F 00 CD CD CD CD CD CD CD CD
{70} normal block at 0x003F4A30, 8 bytes long.
Data: < )i > 0C 29 69 00 00 00 00 00
Object dump complete.
最直接的方法是使用Windows API函数跟踪内存使用情况,如_CrtDumpMemoryLeaks。
将此与_CrtMemCheckpoint结合使用可以证明在跟踪顽固泄漏时至关重要。
如果你正在使用MFC,你可以选择定义DEBUG_NEW
,它为全局new
/delete
操作符添加了额外的跟踪,为每个泄漏的分配提供文件和行号,这也非常有用,但它不适用于new的某些实现(例如std::nothrow)。
我不确定您所说的"关闭类"究竟是什么意思,但是如果您能够在Linux中运行代码,那么valgrind始终是跟踪内存泄漏的一个很好的选择。Purify在Windows中也可以很好地工作,但是它是$$。
另一种方法是尝试预先阻止这个问题:使用智能指针代替原始指针。
最后,请确保您实际看到的是泄漏,而不仅仅是内存增长到某个平台。
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存