我正在研究OpenCV中的3D稀疏矩陣,當我嘗試調用cv :: SparseMat(http://docs.opencv.org/modules/core/doc/basic_structures.html#sparsemat-release)的發佈方法時,出現此訪問衝突錯誤。釋放SparseMat時發生訪問衝突錯誤
上的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++。任何幫助深表感謝。謝謝。
它在*'release()'被調用後發生,正確的,即當'smat2'超出範圍時? – thokra
是的,當我在'inline void SparseMat :: release()'函數中調用'release()'的時候會發生這種情況。 – emredog
當你用'cv :: SparseMat smat2 = Test();'替換'smat2 = Test();'時會發生同樣的情況嗎? – thokra