2013-10-15 36 views
0

Visual Studio 2012告訴我下面的程序有內存泄漏。這是正確的,如果是這樣的話,當使用(例如)靜態向量時如何避免內存泄漏?靜態變量導致C++內存泄漏

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

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

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

它報告「泄漏」,因爲你稱它爲時尚早。如果您刪除對_CrtDumpMemoryLeaks的調用並在Debug中運行,是否會收到泄漏報告? –

+0

@RogerRowland糾正我,如果我錯了,但不是那個調用需要產生內存泄漏報告? – DeeperUnderstanding

回答

4

您在靜態變量的作用域完成之前調用該函數。所以你期望變量被破壞是錯誤的。

在調用該函數之前,您需要等到示波器結束。當然,這是很難做到的,但運行時可以幫助你,在描述的documentation

該功能可以自動在程序終止通過打開使用_CrtSetDbgFlag的_crtDbgFlag標誌的_CRTDBG_LEAK_CHECK_DF位字段名爲功能。