DLL卸载时内存泄露

时间:2014-07-22 23:55:07

标签: dll memory-leaks com openssl

我在Windows DLL(C ++,伪代码)中有以下内容:

void func()
{
    static void *ptr;

     if ( !ptr )
         ptr = malloc(50000000);
}

问题是如果重复加载和卸载DLL(通过LoadLibrary / FreeLibrary),则静态数据的值不会持续存在;因此每个加载/自由循环都会泄漏所有内存。

根据func无法更改的要求,是否有内存泄漏的解决方案?


背景:在“真实代码”中,func实际上是在初始化OpenSSL。 OpenSSL初始化mallocs一些表并保留一个指向这些表的静态指针;并且没有释放该内存的功能。

几年前我实际上已经提交了一个补丁到0.9.8-something,确实提供了与我所知道的所有这些分配函数相对应的释放函数;但是检查1.0.0版本时,有人已经注释掉了大部分内容,“这应该永远不会被解除分配!”。负责人显然不知道卸载DLL,他们认为静态指针在进程的生命周期内保留了它的值。

此外,在“真实代码”中,DLL包含COM对象,但这与我所知道的没有区别。我目前正在解决这个问题,让DllCanUnloadNow始终返回否,但这并不理想。

0 个答案:

没有答案