【问题标题】:C Linked List allways returns nullC 链表总是返回 null
【发布时间】:2023-03-13 14:21:02
【问题描述】:

我正在尝试做一个项目来检查列表中的单词是否重复,但它看到 AuxLista 总是将 temp-palavra 返回为 null?

void AuxLista(Lista *L, char tmp_word) {
    if (!L) return;
    Lista *temp = L;

    printf("\n");

    while (temp != NULL)
    {
        if(temp->palavra == tmp_word){
            printf("%s Está repetida. ", temp->palavra);
        }
        printf("TESTE %s", temp->palavra);
        temp = temp->prox;
    }
}

Lista *criarLista(char *word){

    Lista *result = malloc(sizeof(Lista));

    AuxLista(result, word);

    result->palavra = word;
    result->prox = NULL;
    if (result->NOCORRENCIAS == NULL) result->NOCORRENCIAS = 1;
    else result->NOCORRENCIAS = result->NOCORRENCIAS + 1;

    return result;
}
  • 列表项

【问题讨论】:

    标签: c list file


    【解决方案1】:

    您的 AuxLista 函数是 void -- 它不会返回任何内容。

    另外,请注意malloc() 的结果是未初始化的内存。如果您没有将每个字节设置为一个值,那么您必须假设该字节具有它可能具有的最差值。您可以考虑使用calloc 或将内存传递给memset 以将所有内容初始化为0

    你应该检查malloc 没有返回NULL,如果你不看它就会这样做。

    最后,不要使用NULL 来表示0。您的NOCORRENCIAS 似乎是一个整数(因为您将其设置为1),这意味着您通常会根据0 而不是NULL 检查它。但是整个if/else 似乎都被浪费了——你可以只做result->NOCORRENCIAS += 1 并同样处理零/非零情况。

    【讨论】:

    • 我的意思是 temp->palavra 总是空的,尽管它应该有一些东西。感谢您的帮助!
    • 再次:malloc 的结果是未初始化的内存。在向内存提供任何值之前,您正在调用 AuxLista
    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2016-11-02
    相关资源
    最近更新 更多