c - 如何在指针内部分配内存?

标签 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

我已经尝试了所有方法,但找不到我的错误在哪里。请你帮助我好吗? 谢谢!!

最佳答案

我认为您不需要 50000 个 vector 对象,每个 vector 对象有 50000 字节的字符缓冲区。

所以看看这个:

  • 首先列出 1000 个 vector 对象
  • 然后为每个分配一个内存块给字符指针

.

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

关于c - 如何在指针内部分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921540/

相关文章:

c - 打开文件时复制字符串时遇到问题

c++ - 无法将整数写入缓冲区内的偏移量 (char*)

java - 处理 controlP5 使用过多内存

c++ - 使用 `std::shared_ptr` 时有效地节省内存/编程

c - "softlink between 2 pointers in C"这可能吗,在字符串排序中需要这个

c - 为什么我无法比较文件中的那些数组和我读取的用于创建登录系统的数组?

c - 如何在C程序中分离这个数字-51.235

c - 将函数的局部变量传递回其参数

C++ 修改指向结构的指针 vector 会导致未定义的行为

c - 在释放指针变量指向的内容后重用它们是否安全?