写了个lib库程序。
在控制台应用程序中调用该lib库,执行都正常,退出时也没有内存泄漏。
在MFC界面应用程序中调用该lib库,执行正常,但退出时报告有内存泄漏。
如下:
Detected memory leaks!
Dumping objects ->
{168} normal block at 0x0080FF18, 16 bytes long.
Data: < a ` > DC D9 C8 61 02 00 00 00 01 00 00 00 60 FE 80 00
{167} normal block at 0x0080FEC8, 14 bytes long.
Data: <bad exception > 62 61 64 20 65 78 63 65 70 74 69 6F 6E 00
{166} normal block at 0x0080FE60, 44 bytes long.
Data: < a ( a a> EC B9 C8 61 00 00 00 00 28 BA C8 61 E0 B8 C8 61
{163} normal block at 0x0080FD70, 16 bytes long.
Data: < a @ > C0 D9 C8 61 02 00 00 00 01 00 00 00 40 F7 80 00
{162} normal block at 0x0080F740, 44 bytes long.
Data: < a @ a a> A4 B8 C8 61 00 00 00 00 40 B9 C8 61 E0 B8 C8 61
{161} normal block at 0x0080F6F8, 8 bytes long.
Data: <$ a > 24 D1 C9 61 00 00 00 00
Object dump complete.
一遍又一遍的检查了代码,没有发现程序上有内存泄漏的地方。
经过调查,MFC的使用改为[在静态库中使用 MFC]后,重新编译运行,检测出内存泄漏的提示消失。
我写的程序中有全局变量类实例,而且里面new了内存,但类实例析构时delete了内存。
猜测有可能是全局变量释放前进行了内存泄漏检测。导致出现内存泄漏提示。
设置为[在静态库中使用 MFC]后,内存泄漏的检测置后到全局变量释放后了,所以就没有问题了。
在MFC中使用ACE也出现了类似的问题。估计采用同样方法都可以解决。