C 清除链接结构中的每个节点
我被困在这里了。 你能帮帮我吗? 我似乎无法实现这个函数“freeThis”。 我正在尝试释放链接列表中的节点 结构C 清除链接结构中的每个节点,c,pointers,struct,nodes,C,Pointers,Struct,Nodes,我被困在这里了。 你能帮帮我吗? 我似乎无法实现这个函数“freeThis”。 我正在尝试释放链接列表中的节点 结构 struct node { unsigned x; double y; struct node *next; }; typedef struct node Nodes, *This; 职能声明 void freeThis(This *); void freeThis(This *head) { This * tmp; while (hea
struct node {
unsigned x;
double y;
struct node *next;
};
typedef struct node Nodes, *This;
职能声明
void freeThis(This *);
void freeThis(This *head)
{
This * tmp;
while (head != NULL)
{
tmp = head;
*head = *head->next; /*error is here I think */
free(tmp);
}
}
职能的执行
void freeThis(This *);
void freeThis(This *head)
{
This * tmp;
while (head != NULL)
{
tmp = head;
*head = *head->next; /*error is here I think */
free(tmp);
}
}
更新
当有这样声明的函数时
void freeNodes(Nodes *);
像这样实现
void freeNodes(Nodes *a)
{
free(a);
printf(“sucess”);
}
我将如何使用此功能
像这样
freeNodes(*tmp);
这是一种指针类型:typedef struct node Nodes,*This
请注意,您不需要指向指针的指针,一个指针就足够了,因此请更改:
void freeThis(This *head) /* head is a pointer to pointer */
{
This * tmp;
到
及
到
是的,问题在这里:
*head = *head->next;
这是因为运算符优先级。->首先计算,然后计算*
试一试
有关更新:
如果您已将temp声明为
Nodes * temp
然后调用函数
freeNodes(temp)
你也可以试试这个
void freeThis(Nodes **head)
{
Nodes *tmp;
while (*head)
{
tmp = *head;/*first node to be delete*/
*head = *head->next;/*2nd node is updated as headpointer*/
free(tmp);/* freeing first node & here you can call your freeNodes function...*/
}
}
*头部=*头部->下一步;这很管用,但我遇到了另一个problem@billybob我怀疑它是否有效。从语义上讲,它是不正确的。释放链接列表的惯用方法不是替换节点本身,而是只替换指针,原因很明显。另外,不要将指针隐藏在typedef后面。完全去掉这个,只使用Node*。你是如何声明temp的?哦,tmp应该与我之前发布的内容一致。而不是使用freetmp;我试图使用void freeNodesNodes*a,它本身将使用freetmp;稍后,但我需要这样做,但您不需要指向指针的指针,请参阅我的答案。@AlterMann:我知道指向指针的指针不是必需的。我刚刚给出了问题的解决方案。@Arpit,这是OP对“是”的回复,有效,您的答案是正确的;简短回答:不要键入def。typedef只是为了让您感到困惑。直到你知道更多
freeNodes(temp)
void freeThis(Nodes **head)
{
Nodes *tmp;
while (*head)
{
tmp = *head;/*first node to be delete*/
*head = *head->next;/*2nd node is updated as headpointer*/
free(tmp);/* freeing first node & here you can call your freeNodes function...*/
}
}