这里是C中的一些代码。基本上,它创建一个小的二叉树,然后以递归的顺序遍历它。虽然我期待' 1 2 3'但它一直给我' printf'结果' 0 0 3'。
有人对下面的代码有任何想法吗?
#include <stdio.h>
#include <stdlib.h>
typedef struct binary_tree{
struct binary_tree *left;
struct binary_tree *right;
int value;
}binary_tree;
void init_btree(binary_tree *root);
// traverse the tree in pre-order recursively
void pre_order_r(const binary_tree *root){
if(root == NULL){
return;
}
printf("%d ", root->value);
pre_order_r(root->left);
pre_order_r(root->right);
}
int main() {
binary_tree *root = (binary_tree*)malloc(sizeof(binary_tree*));;
init_btree(root);
pre_order_r(root);
printf("\n");
}
void init_btree(binary_tree *root){
root->left = root->right = NULL;
root->value = 1;
binary_tree * p1 = (binary_tree*)malloc(sizeof(binary_tree*));
p1->left = p1->right = NULL;
p1->value = 2;
binary_tree * p2 = (binary_tree*)malloc(sizeof(binary_tree*));
p2->left = p2->right = NULL;
p2->value = 3;
root->left = p1;
root->right = p2;
}
答案 0 :(得分:3)
更改
(binary_tree*) malloc(sizeof(binary_tree*))
到
malloc(sizeof(binary_tree))
你想要这个结构的内存,而不是这个结构的指针的内存。
并且不要施放malloc的值。这在C ++中是必需的,但您在C中进行编程,其中隐式转换正在为您执行此操作。
答案 1 :(得分:2)
我认为,你的问题是
binary_tree *root = (binary_tree*)malloc(sizeof(binary_tree*));
root
是指向binary_tree
类型的指针。因此,您需要为binary_tree
结构分配内存,而不是“指向结构的指针”。
如果您想要更清晰的照片,可以使用binary_tree
打印*binary_tree
和sizeof()
的尺寸。
您可以以健全的方式重写该分配语句
binary_tree *root = malloc(sizeof*root);
一些一般性建议:
malloc()
是否成功。malloc()
C
和main()
家人的回复价值see why not to cast。int main(void)
的推荐签名为{{1}}。