简单的C trie程序出错(分段错误)

时间:2016-03-31 19:10:10

标签: c trie

为了理解尝试,我正在创建这个非常简单的C程序,该程序从用户10个nums从0到9作为trie的子项。最后一步是使用函数print打印这个nums,但是我遇到了分段错误:

#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");
}

1 个答案:

答案 0 :(得分:0)

您的代码存在以下问题:

  1. 第一次提及malloc并未实际初始化内存(ar字段)。你应该正确地初始化它

    list *root = malloc(sizeof(list));
    

    缺少初始化,例如

    root->data = 0;
    for (size_t ii = 0; ii < 10; ii++) {
        root->ar[ii] = NULL;
    }
    
  2. 当您实际收集输入时,只为​​指针分配足够的内存,而不是实际的列表本身。

    head->ar[a] = malloc(sizeof(head));
    

    应如上所述进行初始化(head = malloc(sizeof(list)); for (size_t ...

  3. 实际运行程序时似乎存在无限循环(纠正所有这些问题后)。

  4. 编辑:删除calloc ...