簡體   English   中英

在Mac中用C創建二進制樹時出現總線錯誤10

[英]Bus Error 10 on Mac when creating a binary tree in C

我在嘗試使用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); 
  }

暫無
暫無

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

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