簡體   English   中英

C - 出現分段錯誤(核心轉儲)

[英]C - Getting Segmentation fault(core dumped)

我剛開始學習樹並想實現它。此代碼編譯但運行后我得到分段錯誤。我有

有2個功能

1."new" 這將創建一個新節點以添加到樹中

2."insert" 這會將數據插入樹,這是一個遞歸 function

我只想檢查數據是否正在存儲,所以我嘗試在根節點中打印值,但隨后出現分段錯誤

我檢查了所有似乎正確但不知道出了什么問題的東西

struct node
{
    int data;
    struct node* left;
    struct node* right;
};
struct node* new(int data)
{
    struct node* newnode = (struct node*)malloc(sizeof(struct node*));
    newnode->data=data;
    newnode->left=newnode->right=NULL;
    return newnode;
}
struct node* insert(struct node* root,int data)
{
    if(root==NULL)
    {
        new(data);
    }
    else if (data<=root->data)
    {
        root->left =insert(root->left,data);
    }
    else
    {
        root->right=insert(root->right,data);
    }
    return root;
}


void main()
{
    struct node* root = NULL;
    root = insert(root,15);
    root = insert(root,20);

    printf("%d",root->data);
}

我希望 output 為 15,但會出現分段錯誤。

您不會將數據存儲在任何地方。 更改new(data); root = new(data); insert function 中。

另一個錯誤是struct node* newnode = (struct node*)malloc(sizeof(struct node*))應該是struct node* newnode = malloc(sizeof(*newnode)) 這既修復了錯誤,又因其他原因而變得更好。

此外, void main()應該是int main()

您必須更改 malloc 表達式。 您應該 malloc 結構節點而不是結構節點*。 此外,您應該將 void main 更改為 int main

首先,您確定要更改struct node* newnode = (struct node*)malloc(sizeof(struct node*)); to struct node* newnode = (struct node*)malloc(sizeof(struct node)); ,刪除 sizeof 中的星號,否則無論結構的大小如何,您都會得到 8 個字節的大小;)

然后你得到一個stackoverflow錯誤,但我讓你搜索那個;p

暫無
暫無

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

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