OpenCV Mat中的动态内存释放错误
Posted
技术标签:
【中文标题】OpenCV Mat中的动态内存释放错误【英文标题】:dynamic memory deallocation error in OpenCV Mat 【发布时间】:2016-03-28 08:00:07 【问题描述】:我想知道 OpenCV Mat 默认构造函数是否已经分配了内存?如文档中所示
> These are various constructors that form a matrix. As noted in the Automatic Allocation of the Output Data, often the default constructor
> is enough, and the proper matrix will be allocated by an OpenCV
> function.
这是否意味着在我的程序结束时发生的释放是正确的。那是对的吗?
实际上,我在程序结束的内存释放阶段遇到了(核心转储)错误。我的初始代码引入了一个 OpenCV Mat,即 Mat A 没有对其进行初始化,这会产生错误。我通过使用初始化修复了这个错误,即 A = Mat::zeros(...)
我想确认我之前的疑问。如果是真的,每次声明 Mat 时都要初始化它是相当不方便的
对不起,我的解释不好!如果我不够清楚,请回复我
【问题讨论】:
忘记提Mat变量在类中声明,类析构函数造成内存错误 请给我们看一个小案例 【参考方案1】:这是否意味着释放发生在我的末尾 程序是正确的。对吗?
cv::Mat
自行分配内存并在共享相同数据的所有cv::Mat
超出范围时释放它(类似于std::shared_ptr
)。
我想确认我之前的疑问。如果是真的,那是相当的 每次声明时都必须初始化 Mat 很不方便
不,这是错误的。但是,由于您没有显示代码,我只能猜测您没有正确链接 OpenCV 哟您的项目,因为一个没有良好链接的 OpenCV 在cv::Mat
破坏阶段导致错误是一个著名的案例。
【讨论】:
对不起,我试过但无法在一个小项目中复制错误!顺便说一句,您能否进一步解释一下 OpenCV 的链接错误?但我的程序并没有一直出现这个错误,但只有一种情况 我没有太多信息。但是,当您在链接到 OpenCV 时混合 32-64 或发布调试二进制文件时,可能会出现此问题。所以,仔细检查所有的 dll 和库 如果我使用初始化,即 A = Mat::zeros(...),问题就解决了(在 cmd 行运行中)。但是,如果我使用调试跟踪代码,它仍然会出现 不,它没有修复。它已被隐藏。如果您确定自己没有做错任何事情,请确保 OpenCV 与所有需要的配置完美链接并且应该得到解决。或者输入您正在使用的代码,以便我们确保其中没有任何错误 我会再次尝试编译更小的代码并上传以上是关于OpenCV Mat中的动态内存释放错误的主要内容,如果未能解决你的问题,请参考以下文章