#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long int length = atol(*++argv);
long int a[length];
// write and read it, so it doesn't get optimized out:
for (int i = 0; i < length; ++i)
a[i] = i;
for (int i = 0; i < length; ++i)
if (a[i] != i)
return 1;
}
上面的程序在大多数情况下会运行,但是当我尝试使用大数字(例如a
)初始化数组1967791
时,我会遇到分段错误。有没有办法可以为程序分配更多的内存,所以这不会发生?
我在使用Linux的虚拟机上运行此程序。
答案 0 :(得分:-1)
您需要在堆上分配内存,而不是在堆栈上分配:
long int *a = malloc(array_length * sizeof *a);
如果不再需要free()
,请不要忘记。