如果该变量temp
以后可能会在代码中再次使用,那么最好将其设置为 NULL。
释放指针后通常将指针设置为 NULL 有两个原因。
1.) 一旦你释放了一个指针,指向的地址的内存就不再对你的程序可用。从理论上讲,该内存现在可以被任何其他程序使用,包括操作系统本身!试图释放一个已经被释放的指针,从而指向谁知道什么会导致一个巨大的问题。幸运的是,现代操作系统可以防止这种情况发生,但程序仍然会因非法访问错误而崩溃。释放一个空指针 OTOH 绝对不会做任何事情。
2.) 在使用运算符取消引用它之前,您应该始终检查指针是否为 NULL *
。取消引用 NULL 指针将导致运行时错误。取消引用指向任意内存的已释放指针甚至更糟。释放的指针应始终设置为,NULL
以便后面的代码可以假定非空指针指向有效数据。否则无法知道指针是否仍然有效。
至于原始问题,指针变量temp
在一个不再使用的短函数中声明为局部变量。在这种情况下,没有必要将其设置为 NULL,因为一旦函数返回,它就会超出范围。
然而,线...
(*head)->next = (*head)->next->next;
在尝试取消引用之前无法确保(*head)->next
它不为空,这是不行的。
更好的版本应该是...
int DeleteAfter(Node **head){
Node *node_after = NULL;
if(*head==NULL)
return -1;
node_after = (*head)->next;
if(node_after == NULL)
return -1;
(*head)->next = node_after->next;
delete node_after;
return 0;
}
现在使用该函数的人可以通过返回值检查节点删除是否成功,并且没有尝试删除不存在的节点的风险。