使用opencv进行图像、矩阵的处理。
CvMat *reult;
IplImage * img;
.........
//处理操作进行完之后
cvReleaseMat( &result );
cvReleaseImage(&img);出现错误:Windows has triggered a breakpoint in MDIDocvw.exe.This may be due to a corruption of the heap, which indicates a bug in MDIDocvw.exe or any of the DLLs it has loaded.This may also be due to the user pressing F12 while MDIDocvw.exe has focus.The output window may have more diagnostic information.
查一下有人说是因为之前使用了new/malloc破坏了内存,后来又使用了这段被破坏的内存导致?请问:
原因是这样的吗?要怎样才能解决呢?
求大神
求大神

解决方案 »

  1.   

    是的,主要检查对象的生成和销毁顺序,尤其是这种情况
    B依赖A
    B在析构的时候会调用到A进行一定的操作
    而在程序结束的时候先调用了A的析构函数而后B才析构。你可以在调试模式下发生错误是点break,找到产生这一问题的地方进一步分析(不一定准确)。
    另外在进行销毁的顺序最好和定义的顺序相反。定义时被依赖的在前。
    所以你最好
    cvReleaseImage(&img);
    cvReleaseMat( &result );
      

  2.   

    楼主碰到了传说中的踩内存了。这种东西最好的解决方法就是断点崩溃,CallStack然后反找。不难处理吧