トライを理解するために、私はトライの子として0から9までのユーザー10 numを取るこの非常にシンプルなCプログラムを作成しています。最後のステップは、機能print
でこれNUMSを印刷することですが、私はセグメンテーションフォールトを取得しています:シンプルCトライプログラムが間違っている(セグメンテーションフォールト)
#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int data;
struct list *ar[10];
} list;
void insert(list *head);
void print(list *head);
int main(void)
{
printf("hello\n");
list *root = malloc(sizeof(list));
insert(root);
print(root);
}
void insert(list *head)
{
int a, i;
if (head == NULL) {
return;
}
for (i = 0; i < 10; i++) {
printf("Give Num 0-9\n");
scanf("%i", &a);
head->ar[a] = malloc(sizeof(head));
head = head->ar[a];
head->data = a;
}
}
void print(list *head)
{
if (head == NULL) {
return;
}
while (head != NULL) {
for (int i = 1; i < 10; i++) {
if (head->ar[i] != NULL) {
printf("%i", i);
head = head->ar[i];
break;
}
}
}
printf("\n");
}
'scanf 'からの戻り値、または' a'が0-9の間にあるかどうかは実際には決して決して決してありません。 –
オブジェクトは割り当てられています'malloc()'は初期化されていません。あなたは 'root-> arr [a]'のために有効な値を書くだけですが、配列内のすべてのポインタを読み込みます(そしてそれらがnullでない場合は逆参照してください)。 – EOF
私はこれを簡単にするためにこのようにしています。正しい値のためにsegmeフォルトが発生しています – Spyreto