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

本文探讨了在MFC界面应用中调用lib库时出现的内存泄漏问题,并详细记录了解决过程。通过调整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: <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也出现了类似的问题。估计采用同样方法都可以解决。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值