是什么原因造成我的内存泄漏的OpenCV
我想实现的OpenCV到我的应用程序,但我每次调用函数时存在内存泄漏。我想这与我如何在Visual Studio中使用库有关,但我使用空白项目对它进行了测试,并且它对于相同的设置似乎可以正常工作。是什么原因造成我的内存泄漏的OpenCV
我想落实到代码:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize Microsoft Foundation Classes, and print an error if failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// Application starts here...
// Time the application's execution time.
TIMER start;
// CODE TO GO HERE!
TIMER end;
TIMER elapsed;
elapsed = end - start;
__int64 ticks_per_second = start.get_frequency();
// Display the resulting time...
double elapsed_seconds = (double)elapsed.get_time()/(double)ticks_per_second;
cout << "Elapsed time (seconds): " << elapsed_seconds;
cout << endl;
cout << "Press a key to continue" << endl;
char c;
cin >> c;
}
return nRetCode;
}
如果我实现的简单的东西:“CODE跑到这里”
cv::Mat aVar;
在空间
,我已经把Visual Studio说,一旦程序终止,就会出现内存泄漏。任何想法可能是什么问题?
就像我在最后发表的帖子说,细节是很重要的。非MFC的dll在MFC dll之前加载,并且如果在MFC退出之前没有释放任何数据,MFC会错误地将其报告为内存泄漏。这是一个known issue这是与mfc一起使用opencv时遇到的问题。解决的办法是:
静态链接MFC库(最常见的方式)
尝试解决办法迫使MFC DLL首先被装载在上述连结
延迟加载DLL作为见于this question。
好帖子。我只是补充说,* real *解决方案是忽略来自MFC的内存泄漏检测报告,这些报告往往不完整且具有误导性。 – 2013-05-08 01:56:39
我注意到在调试版本,MFC和OpenCV的组合也可以导致异常行为时,你还用的fopen和FREAD。 fread可能会返回错误9(存储控制块地址无效)。
此外,延迟加载OpenCV的dll文件可能会解决这个问题。
内存泄漏错误可能是误导的原因有很多;一个例子是,它可以执行之前OpenCV的相关全局析构函数有机会运行,也可能显示为泄漏内存这OpenCV的不自由,但其中O/S将在进程终止。在紧密循环中运行代码时,除非您能观察到越来越多的资源消耗,否则应该没问题。 – 2013-05-07 23:53:27