当前位置:C++技术网 > 资讯 > MFC程序内存不断增加,如何检测内存使用情况

MFC程序内存不断增加,如何检测内存使用情况

更新时间:2016-08-10 19:24:25浏览次数:1+次

我是一个mfc对话框程序,主要功能是读串口数据,tcp发送数据,数据库是sqlite3

测试发现程序占用内存每天增加1000K


问题是如何检测内存使用情况,怎样检查代码


C++技术网解答:

    内存泄漏由于动态内存分配后,没有释放导致。如果是简单的忘记了释放,这是很好找的。问题是,很多时候并不是忘记了释放,而是因为复杂的程序逻辑流程,导致某些情况没有正确的执行,或者压根就没有执行,而程序员自己以为会执行,所以就内存泄漏了。

    当然,在程序中传递指针,到处都有指针的身影,会让内存泄漏的几率大大提升。因为到处使用指针,不能随便去释放,而又没有一个好的机制,来确保内存的分配和释放。

    建议的做法是,在一个地方统一管理内存,可以是一个类,可以是两个函数,反正对于内存的管理是集中的,这样其他使用动态分配的内存的地方全部不要分配内存和释放内存,而是借助统一的类或者函数来管理。同时,内存释放后,要让指向内存的指针的值设置为NULL。或者给内存状态设置一个状态变量,使用内存前都要进行查询。

    所以,你这个内存泄漏问题,应该是代码某处分配了内存忘记释放了,请仔细检查一下。检查的方法就是定位分配内存的位置,如new、malloc函数等。找到这个位置之后,再跟着流程走,确定内存是否释放。

    另外,也可以利用内存泄漏检测的代码来检测,见文章《VC++内存泄漏的检测与内存泄漏点定位》,文章里提供了内存泄漏的检测方法详细说明。如果你代码中内存动态分配的不多,就直接定位分配的地方,然后找,这样更快些。如果代码错综复杂,可以借助检测内存泄漏的代码来辅助检测。

    PS:因为不清楚你代码的实现思路,所以无法给出准确的解答。在读取串口的时候,应该会动态创建一个缓存,然后发送。所以据我推测,可能是发生在串口读取数据的地方。

    仅提供一个基本的推测和方法,帮助你解决问题,接下来就看你自己了。