当我在 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;
}
答案 0 :(得分:3)
堆栈通常是有限的资源。使用动态分配(例如malloc
)代替。
答案 1 :(得分:3)
将a
,l
,r
,ans
,x
和y
声明为全局变量,以便将它们分配到堆而不是堆栈。
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
将是更好的选择。