【发布时间】:2017-03-22 09:22:36
【问题描述】:
#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;
}
上面的程序在大多数情况下都会运行,但是当我尝试使用大量数字(例如 1967791)初始化数组 a 时,我遇到了分段错误。有没有办法可以为程序分配更多内存,这样就不会发生这种情况?
我正在使用 Linux 的虚拟机上运行此程序。
【问题讨论】:
-
使用
malloc而不是将数组放入堆栈。您通常可以从malloc中获得比从堆栈中获得的更多内存。 -
对我来说
argv[1]比*++argv更容易阅读。也可能不希望更改argv。
标签: c arrays memory segmentation-fault