2011-04-21 94 views
7

我工作的一个应用程序是有输入的三种可能尺寸数据:分配大(5000+)阵列

  • 小:1000个元素
  • 介质= 5000个元素
  • 大= 500000个元件

的问题是,我不能分配大阵列。看起来大于5000的尺寸不被接受。

我得到一个运行时错误,当我做到以下几点:

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

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

尺寸看起来做工精细,但我怎样才能使500K大小的数组以这种方式?

+0

你说的“不能分配”意味着什么?你有错误吗?什么信息,你从哪里得到它?请注意,500000个元素不是500K。它可能是2Meg,因为C'int通常是每个4个字节。 – 2011-04-21 15:40:23

+0

我的意思是,我得到一个运行时错误,通过500K我的意思50万件没有大小 – 2011-04-21 15:42:12

+1

运行时错误是一个堆栈溢出 – 2011-04-21 15:43:43

回答

8

你堆栈不能容纳如此多的数据。你必须在堆上分配大数组如下:

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

由于PMG指出记得释放你的记忆,一旦你完成。

free(array); 
+0

在问题的语言是C – 2011-04-21 15:39:38

+1

或,其C等效'INT *阵列的malloc =(的sizeof(int)的大小*)' – cobbal 2011-04-21 15:39:59

+0

耶用于平视感谢。修正了。 – Pepe 2011-04-21 15:40:10

3

它对堆栈太大了。相反,您需要使用malloc将其分配到堆上。

8

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

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

不要忘记检查分配succeded(如果没有 - 的malloc返回NULL)。

而且如前所述PMG - 因为这阵不位于堆栈,你必须free它一旦你已处理完它的工作。

+0

并且记得在你完成它的工作后'释放'指针。 – pmg 2011-04-21 15:43:14

+0

@pmg - 谢谢,只是想过:) – MByD 2011-04-21 15:43:43