1

当我用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;
}
4

5 回答 5

3

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

于 2013-08-09T12:25:22.090 回答
3

a将, l, r, ans,x和声明y为全局变量,以便将它们分配在堆而不是堆栈中。

int a[100000], l[100000], r[100000], ans[100000], x[100000], y[100000];
int main()
{
于 2013-08-09T12:27:38.257 回答
2

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

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

  • 使数组全局化
  • 制作数组static
  • 为他们动态分配堆的内存(例如malloc和朋友)
  • 只需使阵列更小
于 2013-08-09T12:26:36.160 回答
2

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

于 2013-08-09T12:28:11.290 回答
0

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

于 2013-08-09T12:25:34.377 回答