2014-10-29 61 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可以用作容器