在C中创建二叉树时,Mac上的总线错误10

时间:2013-04-18 04:54:43

标签: c macos pointers data-structures binary-tree

当我尝试使用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

1 个答案:

答案 0 :(得分:3)

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); 
  }