gpt4 book ai didi

c - 释放结构内结构中的分配

转载 作者:行者123 更新时间:2023-11-30 17:13:56 24 4
gpt4 key购买 nike

当我尝试释放结构内结构中的分配时,出现错误。我该如何修复它?

typedef struct card
{
char* sign;
char* color;
int number;
char* name;
}card;

typedef struct deck
{
card data;
deck* next;

}deck;

deck* deleteHead(deck* head)
{
deck* curr = head;
if (head==NULL)
return head;
curr=curr->next;
if(head->data.color!=NULL)
free(head->data.color);//error
if(head->data.name!=NULL)
free(head->data.name);//error
if(head->data.sign!=NULL)
free(head->data.sign);//error
free(head);//ok
return curr;
}

当我删除错误并仅释放头部时 - 它会起作用,但是当我尝试删除头部内的分配时,我会收到运行时错误。我该如何解决这个问题?预先感谢您。

最佳答案

您可能没有初始化 card 结构中的指针。这些应该初始化为 NULL 或指向由 malloccallocstrdup 分配的内存的指针。

另请注意,在调用 free() 之前,您不需要针对 NULL 测试指针。 free(NULL); 会立即正常返回,使用 NULL 调用 free 是合法的。顺便说一句,在 C++ 中删除空指针也是合法的。

该功能可以这样进一步简化:

deck *deleteHead(deck *head) { 
deck *next = NULL;
if (head != NULL) {
next = head->next;
free(head->data.color);
free(head->data.name);
free(head->data.sign);
free(head);
}
return next;
}

关于c - 释放结构内结构中的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544895/

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