gpt4 book ai didi

c - 错误 : not a member of structure or union, 导致内存泄漏

转载 作者:行者123 更新时间:2023-12-04 23:09:44 25 4
gpt4 key购买 nike

我试图在 c 语言中创建一个链表,它可以接受一个字符串作为数据,并且我已经实现了一个 push、free 和 pop 函数,但我的问题是,在 pop 函数中,当我尝试释放它。

typedef struct list
{
char* name;
struct list* next;
} node;


void free_list(node*head)
{
if(head==NULL){
return;
}
node* temp=NULL;
while (head!= NULL)
{
temp=head->next;
free(head->name);
free(head);
head=temp;
}
head=NULL;
}

/*add elements to the front of the list*/
void push_list(node **head, char* name)
{
node *temp=malloc(sizeof(node));
if(temp==NULL)
{
fprintf(stderr,"Memory allocation failed!");
exit(EXIT_FAILURE);
}
temp->name=strdup(name);
temp->next=*head;
*head=temp;
}


void pop_list(node ** head) {
node * next_node = NULL;
if (*head == NULL) {
return;
}
next_node = (*head)->next;
free(*head->name); //this line generating error
free(*head);
*head = next_node;
}

bool empty_list(node *head){
return head==NULL;
}

我猜这与我使用指向指针的指针错误有关?有点卡

最佳答案

您需要在 (*head) 两边加上圆括号,使语句 free((*head)->name);free(*head->name) 被解释为 free(*(head->name)),这就是编译器对你大喊大叫的原因。

引用 this Stack Overflow 帖子,原因是因为后缀运算符 (->) 比一元运算符 (*) 具有更高的优先级。

关于c - 错误 : not a member of structure or union, 导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com