我被困在这里。 你能帮我么? 我似乎无法实现这个功能“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 (head != NULL)
{
tmp = head;
*head = *head->next; /*error is here I think */
free(tmp);
}
}
UPDATE!
当有一个像这样声明的函数时
void freeNodes(Nodes *);
像这样实施
void freeNodes(Nodes *a)
{
free(a);
printf(“sucess”);
}
我将如何使用此功能?
喜欢这个?
freeNodes(*tmp);
答案 0 :(得分:1)
This
是指针类型:typedef struct node Nodes, *This;
请注意,您不需要指针指针,单个指针就足够了,所以更改:
void freeThis(This *head) /* head is a pointer to pointer */
{
This * tmp;
到
void freeThis(This head)
{
This tmp;
和
*head = *head->next;
到
head = head->next;
答案 1 :(得分:1)
是的,问题在于:
*head = *head->next;
这是因为运营商优先。 - >先评估,然后评估*。
尝试
*head = (*head)->next;
更新:
如果您已将temp声明为
Nodes * temp
然后调用函数
freeNodes(temp)
答案 2 :(得分:0)
您也可以试试这个......
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...*/
}
}