我有一个更大的应用程序,正在产生内存泄漏。我可以将它们钉在cv::resize
电话上。这些泄漏不会导致保证崩溃,但它似乎取决于系统。它撞到了一个,但没有撞到另一个,只有#34;在那里给出第一次机会例外。
我将代码大幅缩减为此(这不会崩溃):
#include <opencv2\opencv.hpp>
int main(int argc, char *argv[])
{
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint(&s1);
cv::Mat src = cv::imread("C:\\Users\\Gunnar\\Pictures\\test.jpg");
cv::Size targetSize(600, 800);
cv::Mat dst(targetSize, src.type());
cv::resize(src, dst, targetSize, 0, 0, cv::INTER_CUBIC);
cv::imshow("resize test", dst);
cv::waitKey(0);
_CrtMemCheckpoint(&s2);
if (_CrtMemDifference(&s3, &s1, &s2))
{
_CrtMemDumpStatistics(&s3);
_CrtDumpMemoryLeaks();
}
return 0;
}
我仍然在两个系统上都出现内存泄漏。
这是使用OpenCV 3,Windows 7作为开发系统,Windows 10作为另一个,都是64位。这是为64位编译的。
我很确定这不是误报,因为它不会在我的应用程序中崩溃,但我似乎无法弄清楚为什么会发生这种情况或我需要做些什么来解决这个问题。 。有没有人知道这里发生了什么?
编辑:
即将修改if
的结果,但SO告诉我Body is limited to 30000 characters; you entered 49686
,所以这里只是_CrtMemDumpStatistics
:
0 bytes in 0 Free Blocks.
2617124 bytes in 21 Normal Blocks.
176508 bytes in 154 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 2899588 bytes.
Total allocations: 3113364 bytes.
编辑2:
我在Visual Studio 2013中工作(默认编译)。 OpenCV 3.0.0。
/ MDd for Debug和/ MD for Release。
Debug Linker命令行:
/OUT:"C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\ResizeTest\x64\Debug\ResizeTest.exe" /MANIFEST /NXCOMPAT /PDB:"C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\ResizeTest\x64\Debug\ResizeTest.pdb" /DYNAMICBASE "opencv_ts300d.lib" "opencv_world300d.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MACHINE:X64 /INCREMENTAL /PGD:"C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\ResizeTest\x64\Debug\ResizeTest.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Debug\ResizeTest.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"E:\OpenCV\build\x64\vc12\lib" /TLBID:1
发布链接器命令行:
/OUT:"C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\ResizeTest\x64\Release\ResizeTest.exe" /MANIFEST /LTCG /NXCOMPAT /PDB:"C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\ResizeTest\x64\Release\ResizeTest.pdb" /DYNAMICBASE "opencv_ts300.lib" "opencv_world300.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MACHINE:X64 /OPT:REF /INCREMENTAL:NO /PGD:"C:\Users\Gunnar\Documents\Visual Studio 2013\Projects\ResizeTest\x64\Release\ResizeTest.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Release\ResizeTest.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"E:\OpenCV\build\x64\vc12\lib" /TLBID:1
编辑3:
这些是我在调试更大的应用程序时得到的异常消息:
VERIFIER STOP 0000000000000900: pid 0x1204: A heap allocation was leaked.
000001DF41222800 : Address of the leaked allocation. Run !heap -p -a <address> to get additional information about the allocation.
000001DF317DFFB0 : Address to the allocation stack trace. Run dps <address> to view the allocation stack.
000001DF415C1FD8 : Address of the owner dll name. Run du <address> to read the dll name.
00007FF8AA7D0000 : Base of the owner dll. Run .reload <dll_name> = <address> to reload the owner dll. Use 'lm' to get more information about the loaded and unloaded modules.