【发布时间】:2012-01-26 19:19:19
【问题描述】:
标题很容易解释。这是我为此目的编写的函数:
void wipeLoneCells()
{
cell *tmp;
tail = head;
while (1)
{
if (head == tail && !tail->flag)
{
head = head->next;
free(tail);
tail = head;
continue;
}
tmp = tail->next;
/***/ if (tmp->next == NULL && !tmp->flag)
{
tail->next = NULL;
free(tmp);
break;
}
else if (!tmp->flag)
{
tail->next = tmp->next;
free(tmp);
continue;
}
tail = tail->next;
}
}
列表的头部和尾部是全局的,并且列表是在调用此函数时构建的,头部指向第一个节点,尾部指向最后一个节点(其下一个为 NULL)。我几乎可以肯定我的链接列表是正确构建的,因为我可以毫无错误地打印它们。有时这个函数可以完美运行,有时它会导致在标有星号的行出现访问冲突。我知道这不是完全错误的,因为当它不产生错误时,我确实得到了我想要的结果,尽管我确实经常收到错误,所以一定有一些我忽略的东西。提前感谢您的帮助。
编辑:这是固定代码:
void wipeLoneCells()
{
cell *tmp;
tail = head;
while (1)
{
if (head == tail && !tail->flag)
{
head = head->next;
free(tail);
tail = head;
continue;
}
tmp = tail->next;
if (tmp->next == NULL && !tmp->flag)
{
tail->next = NULL;
free(tmp);
break;
}
else if (tmp->next == NULL)
{
tail = tmp;
break;
}
else if (!tmp->flag)
{
tail->next = tmp->next;
free(tmp);
continue;
}
tail = tail->next;
}
}
【问题讨论】:
-
你能告诉我们
cell的定义吗? -
提示:如果您使用笔和纸并在此基础上手写要执行的步骤并编写代码,则链接列表问题会更容易解决。
标签: c memory-management linked-list access-violation