尝试使用C中的结构创建二进制树时出现总线错误。
请为我提出解决此总线错误的解决方案。我正在Mac OSX上编译。

#include <stdio.h>
#include <stdlib.h>

struct node {
    int data;
    struct node* left;
    struct node* right;
};

struct node* NewNode(int data) {
  struct node* inode ;
  inode->data = data;
  inode->left = NULL;
  inode->right = NULL;
  printf("%d\n", inode->data);
  return(inode);
}

struct node* insert(struct node* node ,int data){
    if(node == NULL)
        return(NewNode(data));
    else{
        if(data <= node->data)
            node->left = insert(node->left, data);
        else
            node->right = insert(node->right, data);
        return(node);
    }

}

struct node* build123a() {
  struct node* root = newNode(2);

  struct node* lChild = newNode(1);
  struct node* rChild = newNode(3);
  root->left = lChild;
  root->right= rChild;

  return(root);
}

int main(void) {

    build123a();

}


输出:总线错误10

最佳答案

在您的newNode函数中,您正在定义结构指针struct node* inode,但未分配它。然后访问它以存储数据,这是不正确的。

inode将具有随机值(作为地址),访问该地址时,可能会出现总线错误。

您需要在函数中分配内存,例如

  struct node* NewNode(int data) {
      struct node* inode ;
      inode = malloc(sizeof(*inode)); //allocate memory
      inode->data = data;
      inode->left = NULL;
      inode->right = NULL;
      printf("%d\n", inode->data);
      return(inode);
  }

10-04 19:15