Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t定位长度为1000000的c中字符的二维数组_C_Arrays - Fatal编程技术网

Can';t定位长度为1000000的c中字符的二维数组

Can';t定位长度为1000000的c中字符的二维数组,c,arrays,C,Arrays,我试图在c程序中创建一个二维字符数组,如下所示: char array[1000000][10]; 但是程序在运行时输出“分段错误”。我试着用100000创建它,它成功了,但1000000没有成功。这行代码导致分段错误的原因是什么?大约是10兆字节。您可能试图将变量定义为函数局部变量。堆栈通常没有那么大。使用动态分配的内存。如果堆栈是函数中的局部变量,则可能会溢出操作系统对堆栈大小的理解 该阵列将需要1000000*10=~9.5MB的堆栈空间,这相当大 尝试: 使其静态 改用malloc(

我试图在c程序中创建一个二维字符数组,如下所示:

char array[1000000][10];

但是程序在运行时输出“分段错误”。我试着用100000创建它,它成功了,但1000000没有成功。这行代码导致分段错误的原因是什么?

大约是10兆字节。您可能试图将变量定义为函数局部变量。堆栈通常没有那么大。使用动态分配的内存。

如果堆栈是函数中的局部变量,则可能会溢出操作系统对堆栈大小的理解

该阵列将需要1000000*10=~9.5MB的堆栈空间,这相当大

尝试:

  • 使其
    静态
  • 改用
    malloc()
  • 修改操作系统级别限制
  • 使之全球化。当然,全局变量是不好的,所以在许多情况下,这是最糟糕的解决方案

这几乎是10MB,通常堆栈在一位数范围内。例如,Windows默认只有1MB堆栈。@ M.S.:它不是一个副本,因为一个是C,另一个是C++。许多其他的重复,例如选项4:使用一个代码>静态< /代码>数组。全局变量永远不是一个好的选择。