2013-06-04 143 views
2

我在C程序設計新的(我的主要領域是爪哇)和Java中存在的ArrayList的,我可以作出這樣如何在內存中分配一個指針內的指針?

ArrayList<Class> arraylist = new ArrayList<Class>(); 

我的學生類可以有幾個項目,如int或字符串。

在C中,我發現我不能這樣做,但需要做這樣的事情,所以我做了這個

typedef struct vectorObject { 
     int myInt; 
     char *charPointer; 
    } vectorObject; 

我定義我的結構的指針這樣的:

vectorObject *listVectorObject; 

和使用

#define MAX_FILE_SIZE 50000 

時,我想的分配的內存,我用這個:

int i; 
    listVectorObject = malloc(MAX_FILE_SIZE); 
    if (listVectorObject == NULL) { 
     printf("Out of memory1\n"); 
     exit(1); 
    } 
    for (i = 0; i < MAX_FILE_SIZE; i++) { 
     listVectorObject[i].charPointer= malloc(MAX_FILE_SIZE); 
     if (listVectorObject[i].charPointer == NULL) { 
       printf("Out of memory2\n"); 
       exit(1); 
     } 
    } 

問題是,我總是得到

Out of Memory2 

我已經嘗試過一切,我找不到在哪裏我的錯誤是。你可以幫我嗎? 謝謝!

+0

你的機器有多少內存?它是64位嗎? – aardvarkk

+1

你確定要'MAX_FILE_SIZE'迭代嗎? – zch

+0

也許你必須施捨'listVectorObject =(VectorObject *)malloc(MAX_FILE_SIZE);'? – pinkpanther

回答

3

我不認爲你需要50000個vectorObject每個50000字節的字符緩衝區。

那麼看看這個:

  • 必先1000個vectorObjects
  • 然後爲每個分配的內存塊的字符指針

的列表。

int i, howmany= 1000; 
vectorObject *listVectorObject = malloc(sizeof(vectorObject)*howmany); // list of 1000 vectorObjects 
if (listVectorObject == NULL) { 
    printf("Out of memory1\n"); 
    exit(1); 
} 

// one file-size char-pointer for each vector object above 
for (i = 0; i<howmany; i++) { 
    listVectorObject[i].charPointer= malloc(MAX_FILE_SIZE); 
    if (listVectorObject[i].charPointer == NULL) { 
      printf("Out of memory2\n"); 
      exit(1); 
    } 
} 
+0

謝謝大家的迴應!這是記憶! (我愚蠢地認爲它不會影響它......將它改爲更小的數字,它的功能就像一個魅力!) 再次感謝! – liwuen

+1

很高興聽到。請確保在第一個alloc中更改「sizeof(vectorObject)* howmany」。 – Nicholaz

+0

已經做到了!哇,我愛你的反應速度!再次感謝和抱歉,打擾你這樣一個愚蠢的問題(在Java中沒有必要這樣做,所以我有點困惑) – liwuen