内存分配错误OpenCV cvReleaseMat
当我尝试使用内存分配错误OpenCV cvReleaseMat,c,opencv,C,Opencv,当我尝试使用cvReleaseMat(&trainData) 我发现任务管理器中的内存没有减少…相反,此释放命令对任务管理器中此应用程序的内存没有任何影响 我怀疑的是,cvReleaseMat是否也会释放CPU中的内存?或者它只是让矩阵在将来不可见?是cvReleaseMat会释放内存。任务管理器实际上不是查看CvMat*分配内存的工具。虽然如果你想让矩阵更大,你可能会注意到它。该矩阵占用1000*36*4=144000字节 您可以在valgrind分析的以下代码的输出中看到它: CvMat*
cvReleaseMat(&trainData)
我发现任务管理器中的内存没有减少…相反,此释放命令对任务管理器中此应用程序的内存没有任何影响
我怀疑的是,
cvReleaseMat
是否也会释放CPU中的内存?或者它只是让矩阵在将来不可见?是cvReleaseMat
会释放内存。任务管理器实际上不是查看CvMat*分配内存的工具。虽然如果你想让矩阵更大,你可能会注意到它。该矩阵占用1000*36*4=144000字节
您可以在valgrind分析的以下代码的输出中看到它:
CvMat* traindata=cvCreateMat(1000,36,CV_32FC1);
相关的valgrind输出为:
CvMat* traindata = cvCreateMat(1000, 36, CV_32FC1);
//cvReleaseMat(&traindata);
但是如果您实际释放了CvMat
==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
您将获得此输出,请注意valgrind的输出:
CvMat* traindata = cvCreateMat(1000, 36, CV_32FC1);
cvReleaseMat(&traindata);
我不知道你是否认识瓦尔格林。它是用来回答这些问题的我不知道这个valgrind但我相信这会帮我解决问题你能提供在Windows中使用valgrind和OpenCV的任何演示示例的链接吗我在你的原始问题下发布了他们网站的链接作为评论,如果您认为这个答案是好的,您可以接受它。@user2527599关于您的valgrind问题,请参阅以下线程:
==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