2010-06-22 77 views
0

在OSX中,我有以下代碼。使用gcc 4.0.1。我是新來OSX發展,使我不知道還有什麼其他的系統信息會在這裏有用...OSX,靜態變量共享相同的地址

static int  textstrArgs[] = { 1, 1, 1 }; 

void func() 
{ 
    static int first = 1; 
    if (first) 
    { 
     first = 0; 
     // stuff 
    } 
    /* other stuff */ 
} 

其中FUNC()被聲明爲「的extern」,並從另一個庫調用。

問題是'texstrArgs [2]'和'first'的地址是一樣的。也就是說,當應用程序加載它將這兩個變量放在內存中的相同位置。當調用func()時,first = 0將破壞靜態textstrArgs數組中的值。

我會這樣做,會導致這種情況發生?

感謝任何人的幫助。

+1

如果這是真的,這是一個錯誤。你有沒有試過gcc 4.2? – kennytm 2010-06-22 20:04:46

+1

你能分享你用於測試的簡單代碼片段嗎? – Eiko 2010-06-22 20:10:19

回答

0

只是一種預感 - 嘗試改變:

static int textstrArgs[] = { 1, 1, 1 }; 

static int textstrArgs[3] = { 1, 1, 1 }; 

的另一件事 - 你居然引用textstrArgs地方?如果不是,那麼它可能會被優化掉。

+0

好,你指出了我的問題。實際上錯誤的靜態變量已經被使用了,但是每個值通常都是'1',所以事情通常是有效的。 沒有編譯器錯誤,只是程序員錯誤。 – Malcolmb 2010-06-22 20:29:40

1

我懷疑他們實際上是共享地址。我相信你更有可能訪問數組或類似的東西。

嘗試打印兩個變量的地址。這會告訴你,如果你的懷疑是正確的。