2014-10-29 43 views
0

我在初始化一個巨大的數組時遇到了段錯誤。陣列初始化過程中的分段錯誤

對於前:

#include<iostream> 
#include<limits> 
using namespace std; 

int main() 
{ 
    string h; 
    cin >> h; 
    int size=h.size(); 
    cout << size << endl; 
    int arr[size][size]; 
    cout << arr[0][0]<<endl; 
    arr[0][0]=1; 
    cout << arr[0][0]<<endl; 

return 0; 
} 

當用戶輸入一個小弦可以說"sample"程序工作正常。

當用戶輸入是一個大字符串,其大小爲例如。 >1500。在陣列初始化過程中會看到分段int arr[size][size];

問題是什麼?在初始化上述數組時是否存在任何問題。

回答

0

我認爲數組的大小必須始終是C++的編譯時常量,即在編譯時必須知道'size'變量的值。

如果你想動態存儲,使用std :: vector的

0

MSDN指出,Windows上的默認堆棧大小爲1 MB - 在每個維度1500元的情況下,你的陣列將佔用1500 * 1500 * 4 bytes = 9000000 bytes = 8.58 megabytes,不知道Linux(this表明它是8 MB) - 我想這取決於編譯器和分配。因此,要麼:

1)如果你知道有是字符串長度的限制,在​​答案貼在Linux上

2在Windows或類似的/STACK鏈接器標誌相應增加堆棧大小)分配數組堆 - 如果你不想亂搞內存分配std :: vector或std::unique_ptr可以用作容器