从结构中释放分配的内存

时间:2015-04-01 02:53:49

标签: c memory memory-management struct

我正在向函数发送一个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函数中的位置。

2 个答案:

答案 0 :(得分:0)

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

看起来你正试图采取sizeof(temp->name),你首先尝试使用malloc(如果temp->name正在进行malloced,那么它的尺寸是多少? )

这有意义吗?

如果没有,请随时给Judi发邮件,或者问Bucky。 ;)

答案 1 :(得分:0)

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

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