出现这样的问题多半是自己代码有问题,需要仔细排查
我的问题如下:
frame为Mat
pResult为IplImage
之前用如下方式拷贝图像
pResult = &IplImage(frame);
而MFC的Release模式下frame的内存会被自动回收掉,pResult会发生内存错误
奇怪的是同样的代码在控制台应用程序的Release模式中运行正常
修改为以下代码可解决:
IplImage imgTmp = frame;
pResult = cvCloneImage(&imgTmp);
这里cvCloneImage为图像的深拷贝,使用前不用为pResult分配内存,该函数会自动开辟一片内存
如果处理视频,注意每帧使用结束后要释放pResult的内存,否则会造成内存泄露
如果没有这样的问题或者不想修改代码可将VS设置中
属性 ——> C/C++ ——> 所有选项 ——> 优化
由使速度最大化(/O2) 改为已禁用(/Od)
可保证Release模式运行效果和debug模式一致
但不推荐这样做,这样做的代价是失去了Release优化的意义
还是尽量排查代码中存在的问题