簡體   English   中英

為什么此C程序無法正確運行?

[英]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);

一些一般建議:

  1. 在使用返回的指針之前,請始終檢查malloc()是否成功。
  2. 查看為什么不在 Cmalloc()和family的返回值。
  3. 推薦的main()簽名是int main(void)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM