2011-04-21 38 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