奇怪的内存泄漏
我有一个内存泄漏问题,它实际上是从以下结构排列形成:奇怪的内存泄漏
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")}
};
奇怪的是当然的内存泄漏问题,而最古怪的问题是,当我关闭客户端VS转储第一个,第三个和第四个元素,但不转储第二个元素(Tag_XYZ)。内存泄漏似乎产生在第一次运行之前,我甚至调用数组,记住,我只使用数组用于检查的目的裸:
string Get_Tag (Tags tag)
{
return m_ClientType == CType_ABC ? TagData[tag].strABC : TagData[tag].strAB;
}
那实际上整个的原因吧。所以没有任何内联堆/内存分配。
也是标签结构看起来某事像这样:
struct TagStruct
{
Tags tag;
std::string strABC;
std::string strAB;
};
我也想让你知道,这是一个全球性的数组,我自己也尝试使其静止的,而是不断收到内存泄漏,也我试过声明数组中的字符串为"str"
,而不是string("str")
,但不断收到内存泄漏。是的,内存泄漏是静态的,这意味着它不会随着时间的推移而建立,但仍然更好地保持干净的代码。有什么建议么??
这是一个错误泄漏的例子 - 泄漏检测器发现分配的内存在检测器运行时没有被释放。但是检测器在静态对象析构函数之前运行,因此在释放内存之前运行。这就是为什么它从检测器的角度来看是泄漏的,但它并不是真正的泄漏。
认为我的自我,但我想检查... – 2009-11-10 08:45:50
我也想知道为什么VS只转储数组的第一,第三和第四个元素而不是第二个? – 2009-11-10 08:47:22
@红蛇所以作为一种解决方法,您可以通过将结构放入Get_Tag函数来使结构非静态。我不知道编译器可以做什么来优化,但我的猜测是,没有巨大的性能影响。 – foraidt 2009-11-10 08:58:38
这是一个虚惊,但即使它不是,它不会有任何意义, 是一个全局(或静态)变量,这个数组的空间在编译时计算和分配,存储在数据段,这个内存永远不会被释放。 当内存在运行时动态分配而未被释放时发生内存泄漏
错误..我没有看到泄漏..你确定吗? – 2009-11-10 08:41:28
好吧,这就是VS说的,坦率地说,我也没有真正看到泄漏,这就是为什么我用“怪异”这个词 – 2009-11-10 08:43:23