我正在向函数发送一个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
函数中的位置。
答案 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总是告诉我们的那样,防御性编程是一个很好的编程。