在C中显示大型数组的错误

时间:2013-08-09 12:23:43

标签: c arrays

当我在 C 语言中运行以下代码时,我的编译器会显示错误" xxx has stopped working"。

但是,当我将数组大小设置为1000而不是100000时,它运行正常。有什么问题,我该如何解决?如果存在内存问题,那么如何在这些数组中输入100000个数字而不超过它?

我试过的代码:

int main()
{
    int a[100000],l[100000],r[100000],ans[100000],x[100000],y[100000];
    /*
    some code
    */
    return 0;
}

5 个答案:

答案 0 :(得分:3)

堆栈通常是有限的资源。使用动态分配(例如malloc)代替。

答案 1 :(得分:3)

alransxy声明为全局变量,以便将它们分配到堆而不是堆栈。

int a[100000], l[100000], r[100000], ans[100000], x[100000], y[100000];
int main()
{

答案 2 :(得分:2)

大多数系统将堆栈限制在1到4兆字节之间。由于您的阵列超过2MB,因此您最有可能超过系统的堆栈限制。

在C语言中,有几种方法可以解决这个问题:

  • 使数组全局化
  • 制作数组static
  • 为堆的动态分配内存(例如malloc和朋友)
  • 只需将数组缩小
  • 即可

答案 3 :(得分:2)

欢迎使用 stackoverflow ;)
使用动态分配(malloc / free)以使用你所有的ram容量。

答案 4 :(得分:0)

大多数系统的堆栈大小都有限,并且由于您的数组是本地(自动)变量,因此它们将在堆栈中分配,因此您很可能overflowing the stack。如果你需要分配大型数组malloc将是更好的选择。