从DLL导出的静态类变量显示为内存泄漏

时间:2009-06-18 22:42:28

标签: c++

好吧,我在DLL中有一个导出的类。此类具有静态字符串列表,这些字符串在导入过程中的对话框的ComboBox中使用。这些字符串的声明和定义如下:

// In header:
class MYDLL_API someClass {
public:
    static const string stringList[];
    static const int numString;
};

// In .cpp
const int someClass::numString = 3;
const string someClass::stringList[numString] = {
    "String 1",
    "String 2",
    "String 3"
};

所以实际的出口工作正常。但是,我注意到我的VS 2008调试器转储内存显示为

{129} normal block at 0x003D69F0, 32 bytes long.
Data: <String 1>

etc.

因此,为了确定谁泄漏了这个内存,我停止在他们想要的组合框中使用它们并检查泄漏是否仍然存在,它是。所以我的问题是,是否存在一些与从DLL导出静态类变量有关的问题,它被认为是内存泄漏?

1 个答案:

答案 0 :(得分:2)

这可能是静态变量超出范围以及卸载dll时的顺序问题(mfc / crt)。

看一下this - 它描述了你所看到的几乎相同的问题。

还有一个建议的解决方案here,但我不知道这是否有效。

我过去遇到过这样的问题,而且我能够(干净地)摆脱这些误报的唯一方法是将这些静态定义为shared_ptr并在全局“关闭”方法中销毁它们。