我尽量把问题描述清楚:我在MFC下做了一个界面,里面有四个模块儿(其实主要有三个),分别是:读入一幅图像、去噪、模糊核估计、反卷积。这四个过程是连续的,不是并行处理的。
算法我是用matlab研究仿真的(本质上我是做算法研究的。。),然后呢,我想把它做成一个软件,所以就在MFC下作了这样一个界面。
至于代码,我先解释一下,首先matlab的coder工具可以将matlab的函数文件在一定条件下转成独立的C/c++代码,这个我事先研究过了,并发表了论文,没什么问题。所以一开始,我直接将去噪、模糊核估计、反卷积的代码转成了C++代码(转的过程也很痛苦,因为算法相对比较复杂,这也是我不自己编写的原因!!),后来想还是自己手写的更好,出于简单考虑,我只自己编了第一个,也就是去噪的代码。后两个实在太复杂,我只能转了。转的代码虽然看着很乱,但其实写的挺完善。
现在出现的问题是,当运行到第二个模块儿,也就是模糊核(PSF)估计的时候,极其容易卡死,就是很容易出现停止工作的字样。这里需要提的是
没有出现死循环;我还未设置多线程;
很多人告诉我是内存泄漏的问题,我从网上找了这么一个函数对:_CrtMemState s1, s2, s3;_CrtMemCheckpoint(&s1);{代码块}; _CrtMemCheckpoint(&s2); if(_CrtMemDifference(&s3, &s1, &s2));_CrtMemDumpStatistics(&s3);
然后,我抛开MFC,以新的工程的形式单独测试几个模块儿,然后发现了一下问题:
1、第一个模块(去噪),是我自己写的代码,测试结果如下:
1)检测调用函数之前的声明部分,显示一定的数值,这个可以理解,因为分配了内存还未使用;
2)单独检测调用的函数(即我自己写的函数代码),结果是0,没问题;
3)然后整个测试流程,最后把结果free掉之后,没有任何内存泄漏;
4)在最后free之前,也就是包含声明和调用函数两部分,有内存泄漏,但是数值和检测声明部分相同!!(可见,第一个模块儿没什么问题!)
2、后两个模块儿结果时一样的:
1)检测调用函数之前的声明部分,显示一定的数值,这个可以理解,因为分配了内存还未使用;
2)单独检测调用的函数(即转的的函数代码),结果是0,没问题;
3)
问题在这里:在最后free之前,也就是包含声明和调用函数两部分,有内存泄漏,而且数值相比声明部分的急剧增加!!比如:380865039 bytes!(是不是很大啊?)
这个我就不理解了,这是什么原因造成的呢?
我是通信专业的,一般的编程还可以,可是这种问题从未碰到过,很多人给我稍微解释就算了,我也不好意思使劲问,但是确实自己不熟,而且我时间有限,还希望大神不吝赐教!!我分不多,解决的我全给了!!!