在共享 DLL 中使用 MFC 出现内存泄漏

写了个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: 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也出现了类似的问题。估计采用同样方法都可以解决。




你可能感兴趣的:(C++)