首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个c程序不能正确运行?

为什么这个c程序不能正确运行?
EN

Stack Overflow用户
提问于 2014-11-24 13:59:18
回答 2查看 106关注 0票数 1

下面是C中的一些代码--基本上,它创建了一个小二叉树,然后递归地遍历它。虽然我期望‘12,3',它保持给我'printf’的结果'0 0 3‘。

有人知道下面的代码吗?

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 14:04:48

我想,你的问题是

代码语言:javascript
复制
binary_tree *root = (binary_tree*)malloc(sizeof(binary_tree*));

root是指向binary_tree类型的指针。因此,您需要为binary_tree结构分配内存,而不是“指针到结构”。

如果您想要更清晰的图片,可以使用binary_tree*binary_tree使用sizeof()打印大小。

您可以以健壮的方式重写该分配语句,如

代码语言:javascript
复制
 binary_tree *root = malloc(sizeof*root);

一些一般性建议:

  1. 在使用返回的指针之前,始终检查malloc()的成功与否。
  2. see why not to cast malloc()和家庭在C中的返回值。
  3. 推荐的main()签名是int main(void)
票数 2
EN

Stack Overflow用户

发布于 2014-11-24 14:05:20

变化

代码语言:javascript
复制
(binary_tree*) malloc(sizeof(binary_tree*))

代码语言:javascript
复制
malloc(sizeof(binary_tree))

您需要此结构的内存,而不是此结构的指针的内存。

别把malloc的价值抛在脑后。这在C++中是必需的,但是您正在用C进行编程,其中隐式转换正在为您执行此操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27106600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档