从双指针释放结构的内存的正确方法是什么?

时间:2018-04-19 03:33:11

标签: c algorithm structure

// 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“

1 个答案:

答案 0 :(得分:3)

你添加一个额外的星。 Item**是指向Item结构的指针。 ->使用指向结构的指针。 free期望指向要释放的内存的指针。

您需要取消引用指向指针以获取指针。具体来说,函数中的前两行应为:

free((*item)->name);
free(*item);

第一行释放结构的name字段指向的内存,第二行解除分配结构本身。

顺便说一句,*item = NULL;行可能是正确的。它将指针设置为NULL,因此它不能与它指向的内存混淆,后者现在已被释放。