我正在尝试使用嵌套结构构建动态数组。插入项目时,我得到以下内容。 错误:从类型'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;
}
答案 0 :(得分:1)
问题是A.b
不是struct
的数组,它是指针。您可以使指针指向struct
的数组,但默认情况下不会这样做。
最简单的方法是在开头malloc
将struct 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;
}