在mobile平台上写代码久了,平时的时候都是自己给出检索内存泄漏的方案的。但是在win32下的开发,内存泄漏的检索式如此的简单。在 windows下,定义有这样一个宏_CrtDumpMemoryLeaks。它可以帮助你在任何地方打印出当年的内存使用情况,比如说当前有多少内存使 用了没有被释放掉。 比如说你有这样一段程序:
如果执行以下,在输出里面可以看到这样的一段文字: Detected memory leaks!
很高级啊!至少到这一步,你知道了这里有内存泄漏了(当然实际上这里的例子进程结束的时候,系统还是会把这块内存回收的),如果我们想进一步地看到 具体哪一行分配的内存呢?这个更高级一点,就需要多做点事情了。首先你要定义一个新的头文件,用它来重定义一下new操作符,下面就是这个
现在你的程序也做一下改动:
当然啦#include一下我们的新头文件,然后定义一下new。okay运行一把,这个时候的输出就不同了: Detected memory leaks! 可以看到,不仅告诉你了有内存没有删除,同时还有了具体的行号!这样给我们的unittest带来比较大的便利。所以如果是一下逻辑上的模块,如果可以的话可以让他在win32下面跑,测试,等到没有内存问题了,在搬回到移动平台上!这样就可以避免讨厌的内存问题。 当然如果你想一劳永逸的在移动平台上弄也可以,有好事者在code project上面给出了一个wince版本的crtdbg.h,当然原理是一样的,利用重定义的new和__LINE__,__FILE__这两个宏, 每次的new都把对应地址,文件,行号等信息记录下来存入某个容器, delete的时候删除对应的信息,最后程序结束的时候检查容器中是否还有内容,如果有内容就是没有释放的内存。这样的容器自己实现也是比较简单的,那个 code project上的链接在这里 http://www.codeproject.com/KB/mobile/ce_crtdbg.aspx。有空可以再看看。 (hhygcy) |