2013-06-04 50 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