我想要通过malloc方法创建一个结构体指针数组,然后在用BinTree指针给数组赋值时会报类型不匹配的错误。
但是我可以创建一个结构体数组,然后用BinTree指针指向的数据给他赋值
这是什么原因呢
我想要通过malloc方法创建一个结构体指针数组,然后在用BinTree指针给数组赋值时会报类型不匹配的错误。
【以下回答由 GPT 生成】
问题的原因是在使用malloc
分配内存时,只分配了指针数组的内存,而没有为指针数组中的每个指针分配内存空间。因此,在给指针数组赋值时会报类型不匹配的错误。
解决这个问题的方法是,对于每个指针数组元素,都使用malloc
分配内存空间。
以下是修改后的代码示例:
struct BinTree {
int val;
struct BinTree *left;
struct BinTree *right;
};
int main() {
struct BinTree **array = (struct BinTree **)malloc(3 * sizeof(struct BinTree *));
struct BinTree *tree = (struct BinTree *)malloc(sizeof(struct BinTree));
tree->val = 1;
tree->left = NULL;
tree->right = NULL;
// 分配内存空间给指针数组的每个元素
for (int i = 0; i < 3; i++) {
array[i] = (struct BinTree *)malloc(sizeof(struct BinTree));
}
// 将tree指针赋值给指针数组的第一个元素
array[0] = tree;
// ...
// 释放内存
free(tree);
for (int i = 0; i < 3; i++) {
free(array[i]);
}
free(array);
return 0;
}
通过以上修改,我们为指针数组的每个元素分配了内存空间,并成功将tree
指针赋值给了指针数组的第一个元素。最后,不要忘记在程序结束时释放所有分配的内存空间。
【相关推荐】