奇怪的内存泄漏

Zai*_*mir 2 c++ memory-leaks visual-studio-2008

我有一个内存泄漏问题,它实际上是从以下结构数组生成的:

TagStruct TagData [] =
{

    { Tag_SecurityToken, string("x-abc-security-token"), string("ab-security-token") } ,
    { Tag_XYZ, string("x-abc-xyz"), string("ab-xyz") },
    { Tag_ChunkCount, string("x-abc-meta-chunk"), string("ab-meta-chunk") },
    { Tag_OriginalFileSize, string("x-abc-meta-totalsize"), string("ab-meta-totalsize")}

};
Run Code Online (Sandbox Code Playgroud)

奇怪的是当然是内存泄漏问题和最奇怪的问题是,当我关闭客户端VS转储第一,第三和第四个元素而不是第二个元素(Tag_XYZ).在我调用数组之前的第一次运行中似乎会产生内存泄漏,并且记住我只使用该数组进行检查:

string Get_Tag (Tags tag)
{
    return  m_ClientType == CType_ABC ? TagData[tag].strABC : TagData[tag].strAB;
}
Run Code Online (Sandbox Code Playgroud)

这实际上是它的全部原因.因此没有任何类型的内联堆/内存分配.

标签结构看起来像这样:

struct TagStruct
    {
        Tags tag;
        std::string strABC;
        std::string strAB;
    };
Run Code Online (Sandbox Code Playgroud)

我还想让你知道这是一个全局数组,我也试图让它静态但不断发生内存泄漏,我也尝试在数组中声明字符串,"str"而不是string("str")继续让内存泄漏.是的,内存泄漏是静态的,这意味着它不会随着时间的推移而构建,但仍然可以更好地保持干净的代码.有什么建议??

sha*_*oth 7

这是一个错误泄漏的例子 - 泄漏检测器发现在检测器运行时没有释放分配的内存.但是检测器在静态对象析构函数之前运行,因此在释放内存之前运行.这就是为什么它从探测器的角度来看是泄漏的,但它实际上不是泄漏.