C言語で2分木を使った昇順ソートアルゴリズムを作成しています。
小さい順に表示しようとするとセグメンテーション違反が起こってしまいます。原因がわからないので教えていただきたいです。
ソース
#include <stdio.h> #include <stdlib.h> #include <string.h> struct tree { int value; struct tree *left; struct tree *right; }; // ノードを追加 int append(int input, struct tree *current_node) { if (input < current_node->value) { if (current_node->left != NULL) { append(input, current_node->left); } else { struct tree new = {input, NULL, NULL}; current_node->left = &new; } } else { if (current_node->right != NULL) { append(input, current_node->right); } else { struct tree new = {input, NULL, NULL}; current_node->right = &new; } } } // 小さい順に表示 void sort(struct tree *current_node) { if (current_node->left != NULL) { sort(current_node->left); } printf("%d, ", current_node->value); if (current_node->right != NULL) { sort(current_node->right); } } int main() { int sequence[] = {2, 4, 6, 1, 8, 2, 10, 0}; int n = sizeof(sequence) / sizeof(int); struct tree root = { sequence[0], NULL, NULL }; for (int i = 1; i < n; i++) { append(sequence[i], &root); } sort(&root); printf("\n"); }
発生している問題・エラーメッセージ
sort()関数のところでセグメンテーション違反が起こっています。
試したこと
gdbでステップ実行をしてみたのですが、sort()にはいった段階でそれぞれのノードのvalueの値が-129660088のようにおかしくなっていました。
環境
WSL2, Ubuntu20.04LTS, gcc version9.3.0,
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/25 04:11