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