首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Memory allocation error OpenCV cvReleaseMat

Memory allocation error OpenCV cvReleaseMat
EN

Stack Overflow用户
提问于 2013-06-27 18:19:09
回答 1查看 2.1K关注 0票数 0
代码语言:javascript
复制
CvMat* traindata=cvCreateMat(1000,36,CV_32FC1);

当我尝试使用cvReleaseMat(&trainData)释放这个矩阵时

我在任务管理器中找到内存,而不是decreased...instead。这个释放命令对任务管理器中该应用程序的内存没有任何影响。

我怀疑is...does cvReleaseMat是否也释放了内存?或者它只是让这个矩阵在未来变得不可逆转?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 18:49:02

是的,cvReleaseMat确实释放了内存。任务管理器实际上不是用于查看CvMat*分配的内存的工具。不过,如果你想让矩阵变得更大,你可能会注意到。该矩阵占用1,000* 36 *4= 144000字节。

您可以在valgrind分析的以下代码的输出中看到它:

代码语言:javascript
复制
CvMat* traindata = cvCreateMat(1000, 36, CV_32FC1);
//cvReleaseMat(&traindata);

相关的valgrind输出为:

代码语言:javascript
复制
==4967== HEAP SUMMARY:
==4967==     in use at exit: 144,108 bytes in 2 blocks
==4967==   total heap usage: 10 allocs, 8 frees, 144,772 bytes allocated
==4967== 
==4967== LEAK SUMMARY:
==4967==    definitely lost: 64 bytes in 1 blocks
==4967==    indirectly lost: 144,044 bytes in 1 blocks
==4967==      possibly lost: 0 bytes in 0 blocks
==4967==    still reachable: 0 bytes in 0 blocks
==4967==         suppressed: 0 bytes in 0 blocks

但是如果你真的发布了CvMat

代码语言:javascript
复制
CvMat* traindata = cvCreateMat(1000, 36, CV_32FC1);
cvReleaseMat(&traindata);

现在你会得到这个输出,请注意valgrind的输出:

代码语言:javascript
复制
==4957== HEAP SUMMARY:
==4957==     in use at exit: 0 bytes in 0 blocks
==4957==   total heap usage: 10 allocs, 10 frees, 144,772 bytes allocated
==4957== 
==4957== All heap blocks were freed -- no leaks are possible
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17340542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档