分配大型(5000+)arrays

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

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

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

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

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

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

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

 int *arr; arr = malloc (sizeof(int) * 500000); 

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

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

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

 int *array = malloc (sizeof(int)*size); 

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

 free(array); 

它对于堆栈来说太大了。 相反,您需要使用malloc在堆上分配它。