为ADT编写自由函数时,释放传递的指针的约定是什么?

void dropSet(Set s) {
   if (s == NULL) {
      return;
   }
   Node next, curr = s->elems;
   while (curr != NULL) {
      next = curr->next;
      dropNode(curr);
      curr = next;
   }
   free(s)   // <== Should this line be here or no?
   s = NULL; // <== Should this line be here or no?
}

**编辑**
这个集合由用户调用的名为newSet的函数malloc'd。扔在这里意味着要扔掉这一套。如果这里没有调用free,它将是main中调用的下一行。我理解在一个孤立的实现中,不管我用什么方法做它都没有区别,但是作为更广泛社区中的一个约定,我应该释放这个函数中的指针并将其设置为NULL,还是让调用方在调用它的地方释放它?

最佳答案

当然,这取决于“drop”对集合的含义。它的意思是“清除此集合,使其为空”还是“删除此集合,它不再有效”。
如果是前者,那么finalfree()不应该出现,否则应该出现。
因为“下降”(至少对我来说)还不清楚,所以很难肯定地回答这个问题。
我建议重新命名函数(可能是freeSet()deleteSet(),或者创建集合的函数的逆函数是什么)并记录语义(即它做什么)以使其真正清晰。然后决定密码。

关于c - 释放C ADT的公约,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44281707/

10-11 18:53