// deallocate all dynamically allocated memory associated
// with the Item indicated by the handle argument
// and set the Item pointer to NULL
void deleteItem(Item** item) {
free(item->name);
free(item);
*item = NULL;
}
itemDB struct保存** Item theItems。
item struct包含* char名称。
提供了错误消息。
“使 gcc -c item.c -g -Wall item.c:在函数'deleteItem'中: item.c:48:12:错误:在非结构或联合的东西中请求成员'name' 自由(安培;本期特价货品>名称); ^ Makefile:14:目标'item.o'的配方失败 make:*** [item.o]错误1“
答案 0 :(得分:3)
你添加一个额外的星。 Item**
是指向Item
结构的指针。 ->
使用指向结构的指针。 free
期望指向要释放的内存的指针。
您需要取消引用指向指针以获取指针。具体来说,函数中的前两行应为:
free((*item)->name);
free(*item);
第一行释放结构的name
字段指向的内存,第二行解除分配结构本身。
顺便说一句,*item = NULL;
行可能是正确的。它将指针设置为NULL,因此它不能与它指向的内存混淆,后者现在已被释放。