1

我正在尝试使用嵌套结构构建动态数组。插入项目时,我得到以下信息。错误:从类型“struct B *”分配给类型“struct B”时类型不兼容</p>

有什么问题,我在哪里做错了。请帮忙。

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

2 回答 2

1

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

最简单的方法是在开头malloc输入正确数量的struct Bs A.b,然后将struct Bs 的副本放入该数组中。

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 As 组织成自己的数组的任务会复杂得多。

于 2013-10-19T15:04:59.937 回答
0
void insertArray(A *a, int element) {
        struct B b ;
        b.record1 = 100;
        b.record2 = 200;
        A->b[element] =  b;
}
于 2013-10-21T07:40:36.650 回答