我正在开发一个应用程序,其中输入的数据有三种可能的大小:
- 小型:1000个元素
- 中型:5000个元素
- 大型:500,000个元素
问题是我无法分配大数组。似乎不接受超过5000的大小。
当我执行以下操作时,会出现运行时错误:
long size=1000;
char ch;
int arr[size];
ch=getch();
if(ch==..)
size=...;
1000和5000的大小似乎可以正常工作,但我如何以这种方式创建一个大小为500k的数组?
我正在开发一个应用程序,其中输入的数据有三种可能的大小:
问题是我无法分配大数组。似乎不接受超过5000的大小。
当我执行以下操作时,会出现运行时错误:
long size=1000;
char ch;
int arr[size];
ch=getch();
if(ch==..)
size=...;
1000和5000的大小似乎可以正常工作,但我如何以这种方式创建一个大小为500k的数组?
你可以在堆上分配这么大的数组:
int *arr;
arr = malloc (sizeof(int) * 500000);
别忘了检查分配是否成功(如果不成功 - malloc 返回 NULL)。
正如 pmg 提到的那样 - 由于该数组不位于栈中,所以您必须在完成操作后使用 free
进行释放。
您的堆栈无法容纳那么多数据。您需要在堆上分配大型数组,如下所示:
int *array = malloc (sizeof(int)*size);
正如pmg所指出的那样,在完成后记得释放内存。
free(array);
int * array = malloc(sizeof(int) * size)
。 - cobbalsizeof
运算符中使用对象本身。如果数据类型将来发生变化,只需要更改一处代码:int *array; array = malloc(nelems * sizeof *array);
... double *array; array = malloc(nelems * sizeof *array); /* same malloc as before */
- pmg这个对象太大了,栈空间不足以容纳。你需要使用malloc在堆上分配内存。