具有嵌套结构的动态数组

时间:2013-10-19 14:56:53

标签: c++ c data-structures

我正在尝试使用嵌套结构构建动态数组。插入项目时,我得到以下内容。 错误:从类型'struct B *'

分配类型'struct B'时出现不兼容的类型

问题是什么以及我在做错的地方。请帮忙。

typedef struct {
   size_t used;
   size_t size;

   struct B {
      int *record1;
      int *record2; 
   } *b;

} A;


void insertArray(A *a, int element) {
  struct B* b =  (struct B*)malloc(sizeof(struct B));
  A->b[element] =  b;
}

2 个答案:

答案 0 :(得分:1)

问题是A.b struct的数组,它是指针。您可以使指针指向struct的数组,但默认情况下不会这样做。

最简单的方法是在开头mallocstruct B的正确数量转换为A.b,然后将struct B s的副本放入该数组中。

void initWithSize(struct A *a, size_t size) {
    a->size = size;
    a->b = malloc(sizeof(struct B) * size);
}

void insertArray(A *a, int index, struct B element) {
    assert(index < a->size); // Otherwise it's an error
    // There's no need to malloc b, because the required memory
    // has already been put in place by the malloc of initWithSize
    a->b[index] = element;
}

稍微复杂的方法是使用C99的灵活数组成员,但是将struct A组织成自己的数组的任务将会复杂得多。 / p>

答案 1 :(得分:0)

void insertArray(A *a, int element) {
        struct B b ;
        b.record1 = 100;
        b.record2 = 200;
        A->b[element] =  b;
}