[英]Why can't this c program run correctly?
這是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;
}
更改
(binary_tree*) malloc(sizeof(binary_tree*))
至
malloc(sizeof(binary_tree))
您需要此結構的內存,而不是此結構的指針的內存。
並且不要強制轉換malloc的值。 這在C ++中是必需的,但是您正在使用C進行編程,其中隱式轉換正在為您執行此操作。
我想,你的問題是
binary_tree *root = (binary_tree*)malloc(sizeof(binary_tree*));
root
是指向binary_tree
類型的指針。 因此,您需要為binary_tree
結構而不是“ pointer-to-structure”分配內存。
如果您想要更清晰的圖片,則可以使用sizeof()
來打印binary_tree
和*binary_tree
sizeof()
。
您可以用一種健壯的方式重寫該分配語句,如下所示:
binary_tree *root = malloc(sizeof*root);
一些一般建議:
malloc()
是否成功。 C
中malloc()
和family的返回值。 main()
簽名是int main(void)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.