加载时_CrtIsValidHeapPointer(块)异常

时间:2017-06-01 23:50:49

标签: c++ opencv visual-studio-2012 cuda

我正在尝试将VS2012 WinForm应用程序迁移到VS2015,因为一旦应用程序开始加载就会出现异常。我希望能找到问题所在的帮助。

基本应用程序使用VS2012 C ++ / CLI与OpenCV,CUDA和其他两个库。在调试模式下运行时,情况正常。

现在,我正在将应用程序迁移到VS2015。我升级了项目并在调试模式下使用VS2015重新编译了每个库。有了一个有用的建议,我也运行了AppVerif。现在,只要应用程序尝试加载,我就会收到以下错误:

....
'SV11.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\cudart64_80.dll'. Module was built without symbols.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\msvcp140d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\ucrtbased.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_imgproc320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_calib3d320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_stitching320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_imgcodecs320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_xfeatures2d320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_cudaarithm320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_cudaimgproc320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_cudawarping320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\concrt140d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_flann320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_cudafeatures2d320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_cudalegacy320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nppc64_80.dll'. Module was built without symbols.
'SV11.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nppi64_80.dll'. Module was built without symbols.
'SV11.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\cufft64_80.dll'. Module was built without symbols.
'SV11.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\bin\Debug\opencv_cudafilters320d.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\npps64_80.dll'. Module was built without symbols.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\imm32.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\advapi32.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\msvcrt.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\shlwapi.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\kernel.appcore.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\version.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\msvcr120_clr0400.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\psapi.dll'. Symbols loaded.
'SV11.exe' (Win32): Unloaded 'C:\Windows\System32\psapi.dll'
'SV11.exe' (Win32): Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_64\mscorlib\8b6060e8b4fb6d9cd49ef13963733d06\mscorlib.ni.dll'. 
'SV11.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\System32\uxtheme.dll'. Symbols loaded.

SV11.exe has triggered a breakpoint.

'SV11.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\Users\Administrator\Documents\Visual Studio 2012\Projects\SV11\x64\Debug\SV11.exe'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clrjit.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\diasymreader.dll'. Symbols loaded.
'SV11.exe' (Win32): Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_64\System\8b3ae8328c7d1d423a4331cdf2af5eee\System.ni.dll'. 
'SV11.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'. Symbols loaded.

Exception thrown at 0x00007FFE3F2C2496 (verifier.dll) in SV11.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.


=======================================
VERIFIER STOP 000000000000000C: pid 0x580: Exception raised while verifying the heap block. 

000002A17BAF1000 : Heap handle used in the call.
3605D8E8000189EC : Heap block involved in the operation.
0000000000000000 : Size of the heap block.
00000000C0000005 : Reserved.


=======================================
This verifier stop is not continuable. Process will be terminated 
when you use the `go' debugger command.

=======================================

SV11.exe has triggered a breakpoint.

以下是调用堆栈的屏幕截图:

enter image description here

我见过这样的说法,这些错误可能来自于在Release和Debug模式下编译的混合代码。我不认为是这种情况,因为所有内容都是在调试模式下编译的,指定"多线程调试dll"在适当情况下。以下是其中一个库属性的屏幕截图: enter image description here

所以,我的问题是如何弄清楚问题是什么?我也看到过提到混合托管代码和非托管代码的东西。但是,我不认为这是因为使用VS2012相同的代码运行良好。我看到的一件事是对msvcr120的引用,我认为这与VS2012而不是vs2105有关。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

使用application verifier.运行。这是一个检查正在运行的代码是否正确的工具。

访问冲突和调试堆断言是单独的失败。当在附带调试器的应用程序验证程序下运行时,它应该使用更好地描述问题的callstack中断,并且应该简化对出错的搜索。