gpt4 book ai didi

c++ - 释放 SparseMat 时出现访问冲突错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:21 25 4
gpt4 key购买 nike

我正在 OpenCV 中处理 3D 稀疏矩阵,当我尝试调用 cv::SparseMat (http://docs.opencv.org/modules/core/doc/basic_structures.html#sparsemat-release) 的释放方法时,我得到了这个访问冲突错误。

还有一些关于 OpenCV 内存管理的注释:http://docs.opencv.org/modules/core/doc/intro.html#automatic-memory-management

这是我的问题的孤立版本:

int main(int argc, char *argv[])
{
cv::SparseMat smat2;

smat2 = Test();
smat2.release(); //access violation error
}

cv::SparseMat Test()
{
const int sizes[] = {480, 640, 3000};
cv::SparseMat mat(3, sizes, CV_8SC1);
return mat;

}

而发生错误的内部代码是:

inline void SparseMat::release()
{
if( hdr && CV_XADD(&hdr->refcount, -1) == 1 )
delete hdr; // <--- HERE!
hdr = 0;
}

内存管理和 C++ 对我来说已经有一段时间了。任何帮助深表感谢。谢谢。

最佳答案

问题是:“const int sizes[]”。这意味着您在函数 Test() 中在堆栈上(而不是在堆上)创建数组。当您离开函数时它会自动取消分配,因此稍后尝试释放此内存将导致异常。实际上,任何在堆栈上释放内存的尝试都是“有问题的”。

关于c++ - 释放 SparseMat 时出现访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19701837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com