C ++内存泄漏的静态变量

时间:2013-10-15 16:56:33

标签: c++ visual-studio-2012 memory-leaks static

Visual Studio 2012告诉我以下程序有内存泄漏。这是正确的,如果是这样的话,在使用(例如)静态向量时如何避免内存泄漏?

#include <crtdbg.h>
#include <vector>

struct A {
  static std::vector<int> a;
};
std::vector<int> A::a;

int main()
{
  _CrtDumpMemoryLeaks();
    return 0;
}

1 个答案:

答案 0 :(得分:4)

您在静态变量的范围完成之前调用该函数。因此,期望变量被销毁是错误的。

在调用该函数之前,您需要等到范围结束。当然这很难做到,但运行时可以帮助您,如documentation

中所述
  

通过使用_CrtSetDbgFlag函数打开_crtDbgFlag标志的_CRTDBG_LEAK_CHECK_DF位字段,可以在程序终止时自动调用该函数。