在C中使用未初始化的内存指针

在C中使用未初始化的内存指针,c,list,initialization,free,allocation,C,List,Initialization,Free,Allocation,我正在为C中的列表创建一个通用库。我想实现一个名为destroy的方法,该方法将通过释放列表中的每个元素来释放该列表的内存,但编译器一直向我发出警告,尽管在我使用该库编写的程序中一切正常: 警告C6001使用未初始化的内存“*指针” 我如何才能防止此警告 void destroy(list* first_elem) { item* pointer = *first_elem; if (*first_elem == NULL) { return; }

我正在为C中的列表创建一个通用库。我想实现一个名为destroy的方法,该方法将通过释放列表中的每个元素来释放该列表的内存,但编译器一直向我发出警告,尽管在我使用该库编写的程序中一切正常:

警告C6001使用未初始化的内存“*指针”

我如何才能防止此警告

void destroy(list* first_elem)
{
    item* pointer = *first_elem;

    if (*first_elem == NULL) {
        return;
    }
    while (pointer->next != NULL) { //here's the warning
        item* toKill = pointer;
        pointer = pointer->next;
        free(toKill);
    }
    free(pointer);
    *first_elem = NULL;
}
项目和清单的定义:

typedef struct item_struct {
    Set value;
    struct item_struct* next;
} item;

我假设在创建item struct时,没有初始化“item_struct*next”指针


使用未初始化的变量是一种未定义的行为。因此,它可能会引起问题。即使您的代码在您的计算机上正常运行,也不一定意味着它可以在另一台计算机上正常运行。

请发布警告消息的完整且未经编辑的测试。包括
列表
的定义。与其检查
*first_elem==NULL
,不如检查
指针==NULL
是否应该是
,而(指针)
,因为您没有检查
指针
本身是否为空。请编辑问题,包括列表和项目的定义以及完整的警告消息。不要将指针性质隐藏在typedef后面(例如,您的
列表
类型)。它混淆的远不止它的帮助,除非你指的是被视为不透明的
typedef
类型。
typedef item* list;
item i;
i.value = ....;
i.next = NULL; // Add this into your code.