c-我的LINKED_LIST指针怎么可能仍然为NULL



主要功能:

int main()
{
    if((ban_file = open_file("banned_ips.txt")) == NULL)
        goto exit;
    ban_lst = NULL;
    cpy_to_list(ban_file, ban_lst);
    close_file(ban_file);
    dealloc_list(ban_lst);
exit:
    return 0;
}

cpy_to_list函数:

void cpy_to_list(FILE *file, LINKED_LIST *lst)
{
    char *line = malloc(1024);
    while((line = fgets(line, 1024, file)) != NULL)
    {
        add_node(line, lst);
    }
    free(line);
}

add_node,dealloc_list&create_list:

LINKED_LIST *create_list(void)
{
    LINKED_LIST *tmp;
    if((tmp = malloc(sizeof(LINKED_LIST))) == NULL)
        perror("Error during memory allocation");
    return tmp;
}
void add_node(const char *str, LINKED_LIST *lst)
{
    struct list_node *tmp_node;
    tmp_node = create_list();
    tmp_node->str = str;
    if(lst != NULL)
    {
        tmp_node->next = lst;
        lst = tmp_node;
    }
    else
    {
        lst = tmp_node;
        lst->next = NULL;
    }
}
void dealloc_list(LINKED_LIST *ptr)
{
    free(ptr);
}

为什么ban_lst是空指针?

cpy_to_list(ban_file, ban_lst);

无论它做什么,这个函数都无法改变ban_lst指向的内容。无论它做了什么,在调用结束时,ban_lst都将指向它之前指向的位置。也许您希望cpy_to_list接受LINKED_LIST **

您的add_node函数可以更好地表达问题。

lst = tmp_node;

这一行只改变了指针的函数思想。它不会更改来电者的任何内容。

这个C常见问题解答涉及这个主题。

C是一种传递值的语言。您将ban_lst传递给cpy_to_list(),但从调用者的角度来看,它无法更改它。

相关内容

  • 没有找到相关文章

最新更新