所以我试图用这个函数删除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值。谁能解释为什么我得到这些奇怪的垃圾数字?
答案 0 :(得分:2)
一旦你释放了内存,它的内容是未定义的,你不应该触摸它们。这就是为什么你不应该设置一个指向你选择的随机值的指针的原因(操作系统需要允许你访问它。)
您看到的值是垃圾,并且是预期的,因为操作系统不会使内存为零。如果你想确保内存上没有任何东西,你需要自己清除指针:
current = current->next;
tempDelete->next = NULL;
PS:但是,这并不保证在函数结束时头部将为NULL。