0
初始化靜態變量,我定義這樣的函數有錯誤的值
static void
flatten_tree(...)
{
static int num = 0;
...
}
然而,在執行功能時,num
得到一些隨機值,而不是0在第一次運行。在隨後的函數調用時,它的行爲與靜態var應該做的一樣。不是用零顯式初始化的靜態變量嗎?什麼是初始化它的正確方法?
初始化靜態變量,我定義這樣的函數有錯誤的值
static void
flatten_tree(...)
{
static int num = 0;
...
}
然而,在執行功能時,num
得到一些隨機值,而不是0在第一次運行。在隨後的函數調用時,它的行爲與靜態var應該做的一樣。不是用零顯式初始化的靜態變量嗎?什麼是初始化它的正確方法?
如果它在第一次被調用時沒有設置爲零,那麼要麼C實現被破壞,調試器壞了,或者你犯了一些其他錯誤 - 我不會評論哪個是最可能的場景: - )
如果你真的想看到它在做什麼,暫時恰克您的代碼是這樣的:
static void
flatten_tree(...)
{
static int num = 0;
printf("XYZZY DEBUG: initial num is %d\n", num);
exit(1);
...
}
你怎麼知道它不會初始化爲0?你能告訴我們嗎? –
什麼編譯器/版本? –
@ fernando.reyes我正在用gdb調查它。 '(GDB)b flatten_tree' '斷點2處0x81cd496' '斷點2,flatten_tree(...)...'' (GDB)p num' '$ 1 = 7' – mrvn