2017-09-01 89 views
-1

我是新的Cchar * p [1234567] = {NULL};段錯誤,爲什麼?

int main(int argc,char *argv[]) { 
     char *p[1234567] = { NULL }; 
     return 1; 

} 

Segmentation fault

如果我更改爲12345,它會工作。

+0

實際上有幾個重複候選人。 – jxh

+0

這裏的一個具體解決方案是將變量移動到main之前的靜態內存區域。該區域通常比堆棧大得多。 –

回答

2

1234567個指針數組將超過4MB以上。這比許多系統上的線程的堆棧容量大。例如,如果我沒有記錯,在Win32上爲線程堆棧保留的地址空間默認爲1MB。

+0

我用NULL引入了數組,它仍然使用內存? – Sato

+0

你可以請分享任何鏈接說。 – roottraveller

+0

@roottraveller [這裏是鏈接](https://stackoverflow.com/a/45993484/1505939) –

2

那很可能是因爲您的堆棧不具有1234567 *的sizeof(字符*)的空間字節需要通過可變p