分配大型(5000+)阵列

Nat*_*e B 7 c arrays memory-management

我正在开发一个应用程序,如果输入的数据有三种可能的大小:

  • 小:1000个元素
  • 中= 5000个元素
  • 大= 500,000个元素

问题是我无法分配大型数组.似乎不接受大于5000的尺寸.

我执行以下操作时出现运行时错误:

long  size=1000;
char ch;
int arr[size];
ch=getch();

if(ch==..)
  size=...;
Run Code Online (Sandbox Code Playgroud)

1000和5000的尺寸似乎工作正常,但我怎么能以这种方式制作500k的阵列?

MBy*_*ByD 9

您可以在堆上分配这么大的数组:

int *arr;
arr = malloc (sizeof(int) * 500000);
Run Code Online (Sandbox Code Playgroud)

不要忘记检查分配是否成功(如果不成功 - malloc返回NULL).

正如pmg所提到的 - 由于这个数组不在堆栈中,free所以一旦你完成了它就必须使用它.


Pep*_*epe 8

你的堆栈无法容纳那么多数据.您必须在堆上分配大数组,如下所示:

int *array = malloc (sizeof(int)*size);
Run Code Online (Sandbox Code Playgroud)

正如pmg指出的那样,记得在完成后释放你的记忆.

free(array);
Run Code Online (Sandbox Code Playgroud)

  • 请不要转换从malloc返回的值 (3认同)
  • 我喜欢将对象本身用于`sizeof`运算符.如果将来数据类型发生变化,只需更改1段代码:`int*array; array = malloc(nelems*sizeof*array);`...`double*array; array = malloc(nelems*sizeof*array);/*与之前相同的malloc*/` (3认同)