如何为C代码分配更多内存

时间:2016-11-08 16:43:11

标签: c arrays memory segmentation-fault

#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的虚拟机上运行此程序。

1 个答案:

答案 0 :(得分:-1)

您需要在堆上分配内存,而不是在堆栈上分配:

  long int *a = malloc(array_length * sizeof *a);

如果不再需要free(),请不要忘记。