我对C中的结构和自由操作有点混淆。 我必须使用这个结构(我知道不是最好的定义* tList而不是tList,但它必须是那样)
typedef struct cel{
int elto;
struct cel *bif;
struct cel *next;
} *tList;
bif指向previus元素,所以你不要自由(),因为我认为它不是必要的
Malloc tList list=(tList)malloc(sizeof(struct cel));
后来我需要释放记忆。我不知道哪种方法是正确的
使用列表
调用limpiar void limpiar (tList borrar)
{
tList aux;
tList aBorrar;
for(aBorrar = borrar; aBorrar != NULL; aBorrar = aux)
{
aux=aBorrar->next;
free(aBorrar);
}
return;
}
或
使用& list
致电limpiarvoid limpiar (tList * borrar)
{
tList aux;
tList aBorrar;
for(aBorrar = *borrar; aBorrar != NULL; aBorrar = aux)
{
aux=aBorrar->next;
free(aBorrar);
}
return;
}
答案 0 :(得分:0)
如果您通过引用传递列表(第二个选项),您将能够清除呼叫者数据中列表的指针,或至少其中一个。虽然它不是绝对必要的,但不是一个完美的解决方案,它是良好的编程风格,并降低了在free
或调用free
两次后引用单元格的可能性。该功能应该这样修改:
void limpiar(tList *borrar)
{
tList aux;
tList aBorrar;
for (aBorrar = *borrar; aBorrar != NULL; aBorrar = aux) {
aux = aBorrar->next;
free(aBorrar);
}
*borrar = NULL;
}
在调用者中,您将以这种方式调用limpiar
:
limpiar(&list);
// list is NULL now.