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

相關文章
相關標籤/搜索