如何在指针内部分配指针?

时间:2013-06-04 15:18:47

标签: c pointers memory allocation

我是C编程的新手(我的主要区域是java),在java中存在我可以制作的ArrayList

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

我的类Class可以包含多个项目,例如int或string。

在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

我已经尝试了一切,我无法找到我的错误所在。请你帮助我好吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

我认为你不想要50000个vectorObjects,每个都有50000字节的char-buffer。

所以看看这个:

  • 首先制作1000个矢量对象的列表
  • 然后为每个人分配一个内存块到char-pointer

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);
     }
}