opencv+vs2015 堆内存析构异常

最近使用vs2015编译ORB-SLAM2的程序,在debug模式下进行调试运行时碰到了堆内存异常,大体报错内容以下:app

错误:File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp 
Line: 980 
Expression: __acrt_first_block == header 
For information on how your program can cause an assertion 
failure, see the Visual C++ documentation on asserts.

看了网上大牛们的分析,大体能够归因于连接错误。dll 若是静态连接了运行时库,dll 就会拥有独立于应用程序堆(也称做local heap)的运行时堆实例。此时在 dll 外部就不能访问此 local heap,因此也就有上面所出现的异常。函数

检查了一下代码中出错的位置,确实存在这样的状况:spa

vector<cv::KeyPoint> vKeysCell;
FAST(mvImagePyramid[level].rowRange(iniY,maxY).colRange(iniX,maxX), vKeysCell,iniThFAST,
true);

其中vKeysCell在调用opencv中的FAST函数时,在其内部被分配了空间,而后在FAST函数外面对vKeysCell进行析构时出现了前面的析构错误。debug

简单粗暴的解决办法是在调用FAST函数以前,先分配好内存空间。调试

vector<cv::KeyPoint> vKeysCell(10000);

这样就不会报出上面的错误了。code

除此以外,还能够修改库的连接状况,这种方法比较麻烦,暂时不作考虑。orm

相关文章
相关标签/搜索