所以我尝试使用这个函数来删除 C 中的整个单链表。
void zeroList( struct node *head)
{
struct node* tempDelete;
struct node* current = head;
while(current != NULL)
{
tempDelete = current;
current = current->next;
free(tempDelete);
}
}
但是我遇到了问题,因为当我尝试验证列表本身是否已被删除(通过打印它)时。我留下的东西看起来像这样:
{ 0->146513968->146513952->146513936-> NULL }
{ 146513920->146514048->146514032->146514016->146514000-> NULL }
{146513984->146514064->146514080->146514096->146514112->146514128->146514144->146514160->146514176-> NULL }
我的印象是节点不会仍然存在,或者至少它们会包含 NULL 值。谁能解释一下为什么我会得到这些奇怪的垃圾数字?
最佳答案
一旦释放了内存,它的内容就不确定了,你不应该碰它们。这与您不应将指针设置为您选择的随机值的原因相同(操作系统需要允许您访问它。)
您看到的值是垃圾,并且是预期的,因为操作系统不会将内存归零。如果您想确保内存中没有任何内容,您需要自己清除指针:
current = current->next;
tempDelete->next = NULL;
PS.:但是,这并不能保证函数结束时头部将为 NULL。
关于c - 在C中删除整个链表,出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170072/