出于某种原因,我的代码一直在崩溃。 如果有人能帮我找出原因,我会非常感激。
int destroy(struct node *p)
{
struct node * temp = p;
struct node * next;
while (temp->next != NULL)
{
next = temp->next;
free(temp);
temp = next;
}
p = NULL;
return 1;
}
答案 0 :(得分:4)
您需要针对null-ness测试temp
,而不是temp->next
:
void destroy(struct node *p)
{
struct node *temp = p;
while (temp != NULL)
{
struct node *next = temp->next;
free(temp);
temp = next;
}
}
您也不需要将p
设置为null(它没有做任何有用的事情)。返回状态不是一个好主意。你的调用者要么必须测试它(但是永远不会看到除1以外的任何东西,所以测试毫无意义),或者他们必须忽略它(在这种情况下,为什么还要费心去返回呢?)。您也可以不使用变量temp
:
void destroy(struct node *list)
{
while (list != NULL)
{
struct node *next = list->next;
free(list);
list = next;
}
}
如果您确实想将指针设置为null,则必须更改符号:
void destroy(struct node **list)
{
struct node *node = *list;
while (node != NULL)
{
struct node *next = node->next;
free(node);
node = next;
}
*list = NULL;
}
而不是:
struct node *root = ...;
...
destroy(root);
你必须写:
struct node *root = ...;
...
destroy(&root);