<fstream>发布模式下奇怪的内存泄漏

时间:2017-10-15 17:16:07

标签: c++ memory-leaks fstream

我正在使用内存管理器监视我的内存消耗,它基本上跟踪所有全局新/删除分配/解除分配。 我在幕后编写了一个File类,我的内存管理器总是报告错误,但只在RELEASE模式下(vs 2017)。我对此进行了调查,发现当在fstream对象上调用“open”时,它会在“locale0.cpp”中为静态对象分配一个_Fac_node:

__PURE_APPDOMAIN_GLOBAL static _Fac_node *_Fac_head = 0;

void __CLRCALL_OR_CDECL _Facet_Register(_Facet_base * _This)
{   // queue up lazy facet for destruction
   _Fac_head = new _Fac_node(_Fac_head, _This);
}

任何人都可以向我解释这个吗? :d 当这个“_Fac_head”在Release-Mode中被销毁时,我无法弄明白。在调试模式中,在此文件中调用适当的解构函数并销毁此“_Fac_head”。

感谢任何建议:)

1 个答案:

答案 0 :(得分:1)

很可能这是std :: facet的内部表示,它将被移交给std :: locale,因此这应该没有内存泄漏:

  

通常使用第二个参数f来调用重载7,它直接从new-expression获得:locale负责从自己的析构函数中调用匹配的删除。

来自http://en.cppreference.com/w/cpp/locale/locale/locale

您的静态分析工具很可能无法跟踪它。