opencv+vs2015 堆内存析构异常

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

错误: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,所以也就有上面所出现的异常。

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

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

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

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

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

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

除此之外,还可以修改库的链接情况,这种方法比较麻烦,暂时不做考虑。

转载于:https://www.cnblogs.com/CGwolke/p/7851994.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值