我之前问了类似的东西,但现在我遇到了另一个问题。 你能看一下吗?我试图释放在我的程序中创建的链接结构中的节点。 这是结构。
struct node {
unsigned x;
double y;
struct node *next;
};
typedef struct node Nodes, *This;
宣布职能
void freeNodes(Nodes *a);
void freeThis(This *);
功能freeNodes
:
void freeNodes(Nodes *a)
{ free(a);
print ("success");
}
功能freeThis
:
我不知道如何解决这个问题,因此我可以从整个链表中释放节点。
void freeThis(This *p)
{
Nodes *tmp;
while (p != NULL)
{
(*tmp) = Nodes *p;
*p=(*p)->next;
freeNodes(tmp);
tmp = NULL;
}
}
答案 0 :(得分:1)
试试这个
void freeThis(This *p){
Nodes *tmp;
if(!p) return;
while (*p != NULL){
tmp = *p;
*p=(*p)->next;
freeNodes(tmp);
}
}
答案 1 :(得分:1)
我不会使用This
类型,正如我在评论中指出的那样。它让我(更难以理解)正在发生的事情变得更加困难。 (我不认为这对你来说也更容易,但我可能错了。)
鉴于它存在,那么:
void freeThis(This *p)
{
if (p != 0)
{
Nodes *tmp = *p;
*p = NULL;
while (tmp != NULL)
{
Nodes *next = tmp->next;
freeNodes(tmp);
tmp = next;
}
}
}