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;
}
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;
}
您在静态变量的作用域完成之前调用该函数。因此,您期望变量已被破坏是错误的。
在调用该函数之前,您需要等到范围结束。当然这很难做到,但运行时可以帮助你,如文档中所述:
通过使用 _CrtSetDbgFlag 函数打开 _crtDbgFlag 标志的 _CRTDBG_LEAK_CHECK_DF 位字段,可以在程序终止时自动调用该函数。