从结构中释放分配的内存

Freeing Allocated Memory From A Struct

我正在向函数发送一个结构 Food,它的工作是释放结构的已分配内存,而不是结构本身。

结构如下所示:

struct Food{
char * name;
char * foodGroup;
double calories;
char type;
struct Food * next;
};

char *name 和char *foodGroup 是在另一个函数中分配的内存。

struct Food* temp = malloc(sizeof(struct Food));
temp->name = malloc(sizeof(temp->name));       /*ERROR?*/
temp->foodGroup = malloc(sizeof(temp->name));  /*ERROR?*/
temp->next = malloc(sizeof(struct Food));

释放已分配内存的函数如下所示:

void destroyElement(Food *theElement)
{
    free(theElement->name);  /*ERROR*/
    free(theElement->foodGroup);   /*ERROR*/
}

我使用 print 语句来确定分段错误的位置,它看起来像在 destroyElement 函数中。

而不是 malloc(sizeof(temp->name)),试试 malloc(sizeof(thing you want to put in temp->name)

您似乎正在尝试使用 sizeof(temp->name),您首先尝试分配的东西(如果 temp->name 现在正在分配,它的大小是多少?)

这有意义吗?

如果没有,请随时给 Judi 发送电子邮件,或在 Bucky 上询问。 ;)

user3711622 在他们说 malloc 行不正确时是正确的。在 createRecord 函数中,您输入 *name 和 *group。最好的方法是改变 temp->name = malloc(sizeof(temp->name));temp->name = malloc(sizeof(char) * strlen(name));

从技术上讲,您可以使用值 26 而不是 strlen(name),因为 Judi 说她在测试文件中的名字永远不会超过 25 个字符,但就像 Judi 总是告诉我们的那样,防御性编程很好编程。