【发布时间】:2010-10-12 07:08:35
【问题描述】:
我有一个 MFC 项目,它链接到第三方 dll。在程序退出时,IDE 报告“检测到内存泄漏!”并转储泄漏。
这些泄漏来自第三方 dll。我很确定这些被错误地报道了。 (Google 的一项快速检查表明 MFC 在 CRT 销毁文件范围内的变量之前会检查内存泄漏。)
有没有办法禁用内存泄漏检查,只针对那个 dll?
回应到目前为止发布的答案
我不认为我在滥用 API。 我怀疑的行为可以通过一个简单的项目来重现
- 使用VS2005
- 创建一个新的解决方案。
- 创建一个新项目(MFC 应用程序)。
- 创建一个新项目(Windows 32 项目,应用程序类型:DLL,导出符号)
- 在 dll 项目中,导出一个函数。
- 在dll项目中,定义类Foo如下
这是代码
class foo
{
public:
foo(void) { p = new int; };
~foo(void) { delete p; }
private:
int* p;
};
在 dll 项目中,创建类 foo 的实例,范围为文件级别。
foo g_foo;
// This is an example of an exported function.
TEMPDLL_API int exportedFunction(void)
{
return 42;
}
在MFC工程中,链接库,调用InitInstance()中导出的函数
运行应用程序,当调用 g_foo 的析构函数时,会报告内存泄漏,即使 p 被删除。
【问题讨论】:
标签: mfc memory-leaks