c - 在 Mac 上用 C 创建二叉树时出现总线错误 10

标签 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

最佳答案

在您的 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); 
  }

关于c - 在 Mac 上用 C 创建二叉树时出现总线错误 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074768/

相关文章:

创建相互指向的新节点

c++ - 如何存储对象供以后使用并使它们可搜索

c - 评估 p && *p++

C 结构初始化 - 有趣

ios - 打开使用 xcode 8 创建的 Storyboard时,xcode 9 崩溃

C BlackJack 编译但段错误

ios - 在 iOS 上测试蓝牙

macos - xcode应用程序中CFnumber、CFstring等中的CF是什么意思?

c - 如何获取存储为字符的字符串的长度

c - 外部 uvc -usb 相机中原始数据的默认格式是什么 - yuv420 或 yuv422?