OpenCV之_CrtIsValidHeapPointer报错问题

来源:互联网 发布:java 怎么调用sleep 编辑:程序博客网 时间:2024/05/20 12:21

这个错误有两种可能:

一.释放的问题

1,在不同的模块分配的内存,释放的时候会出现此问题,而此问题,只在Debug模式会提示,Release模式不会提示。但不提示并不代表没有错误,一定要解决之。内存不能跨模块分配和释放,模块分配的内存必须由该模块自己来释放,在哪个模块分配的内存,就在哪个模块释放。应该在DLL中再加一个方法,比如MemRelease,主程序调用这个方法来释放内存。

2,就是绕过new和delete,用GlobalAlloc()和GlobalFree()的方法


第一种情况在自主开发或研发的时候会出现,由于OpenCV库能够自动释放分配的内存,无需手动释放,故上述情况很少在OpenCV库中出现。


二.动态链接库的问题

这个问题有四种情况:
1.链接外部lib出错:当前是Debug模式,但工程属性->Configureation Properties->Linker->Input->Additional Dependencies 中的链接库用的却是Release版本的,这个要仔细检查才行。相同道理,Release的模式下也有错用Debug链接库的问题。

2.ruantime Linbrary 方式选择错误:工程属性->Configureation Properties->C/C++->Code Generation->Runtime Library中的选项有可能与当前的编译方式不符。比如当前是Release模式却选择了Multi-threaded Debug DLL (/MDd),相反当前是Debug模式却选择的是Multi-threaded DLL (/MD)。

一般上述两种情况都是VS默认的,只要不人为修改过一般不会错,

3.工程属性->配置属性->VC++目录->库目录中静态链接库lib所属Opencv版本与其VS版本不对应;

4.工程所需的动态链接库dll文件所属Opencv版本与其VS版本不对应。

原创粉丝点击