分配大型(5000+)阵列

时间:2011-04-21 15:35:43

标签: c arrays memory-management

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

  • 小:1000个元素
  • medium = 5000个元素
  • large = 500,000个元素

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

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

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

if(ch==..)
  size=...;

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

3 个答案:

答案 0 :(得分:9)

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

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

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

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

答案 1 :(得分:8)

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

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

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

free(array);

答案 2 :(得分:3)

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