2013-12-17 32 views
0

初始化靜態變量,我定義這樣的函數有錯誤的值

static void 
flatten_tree(...) 
{ 
    static int num = 0; 
    ... 
} 

然而,在執行功能時,num得到一些隨機值,而不是0在第一次運行。在隨後的函數調用時,它的行爲與靜態var應該做的一樣。不是用零顯式初始化的靜態變量嗎?什麼是初始化它的正確方法?

+5

你怎麼知道它不會初始化爲0?你能告訴我們嗎? –

+0

什麼編譯器/版本? –

+0

@ fernando.reyes我正在用gdb調查它。 '(GDB)b flatten_tree' '斷點2處0x81cd496' '斷點2,flatten_tree(...)...'' (GDB)p num' '$ 1 = 7' – mrvn

回答

0

如果它在第一次被調用時沒有設置爲零,那麼要麼C實現被破壞,調試器壞了,或者你犯了一些其他錯誤 - 我不會評論哪個是最可能的場景: - )

如果你真的看到它在做什麼,暫時恰克您的代碼是這樣的:

static void 
flatten_tree(...) 
{ 
    static int num = 0; 
    printf("XYZZY DEBUG: initial num is %d\n", num); 
    exit(1); 

    ... 
}