在C中使用未初始化的内存指针
我正在为C中的列表创建一个通用库。我想实现一个名为destroy的方法,该方法将通过释放列表中的每个元素来释放该列表的内存,但编译器一直向我发出警告,尽管在我使用该库编写的程序中一切正常: 警告C6001使用未初始化的内存“*指针” 我如何才能防止此警告在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; }
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.