cv::imread() 会导致内存损坏

cv::imread() causes memory corruption

本文关键字:内存 损坏 imread cv      更新时间:2023-10-16

我在Qt Creator中创建了一个OpenCV项目。这个非常简单的代码导致内存损坏:

std::string fileName = "c:\Workspace\ImageProcessing\Tutorials\src\images\test.jpg";
cv::Mat mat = cv::imread(fileName.c_str());

执行代码后,cv::Mat为空,文件名的内容也充满了垃圾。我读了 imread 在 Opencv 中不起作用,并且在使用发布库时,OpenCV imread(文件名)在调试模式下失败。

我签入了自己的项目,但我没有混合调试和发布库。还有内存损坏。

事实证明,我在Qt Creator项目中使用了MSVC9(VS2008)编译器,但使用的是使用MSVC10(VS2010)编译的OpenCV。

由于C++接口在编译器版本中不稳定,因此导致内存损坏。问题是这完全无声地失败,没有任何警告,并且它通过内存损坏而爆炸。

下载使用VS2010构建的Qt版本后,它现在可以工作了。