问题代码:
void Function(void)
{
XXXList* list = NULL;
while (cond)
{
... // 对列表进行了操作
XXXList_Free(list);
}
}
显示上述代码产生悬空指针,一般认为问题在于没有遵循Free后指针置NULL的原则,应修改为:
void Function(void)
{
XXXList* list = NULL;
while (cond)
{
... // 对列表进行了操作
XXXList_Free(list);
list = NULL;
}
}
但个人认为问题代码的主要问题是没有考虑list的生命周期,在Function中定义,在while中销毁,不协调。可以将list的定义移到while内部。如下:
void Function(void)
{
while (cond)
{
XXXList* list = NULL;
... // 对列表进行了操作
XXXList_Free(list);
}
}
list不置NULL,代码也不错误,至于在这种情况下是否也需要置NULL,这再讨论。相比第一种修改,这种更加协调。
当然第一种修改复杂些,相比比第二种,能处理更多的事情,比如能在while前操作list。但在Function中定义,在while中销毁,list的生命周期的设计有不清楚的地方。要么都在Function定义销毁,要么都在while中。
2万+

被折叠的 条评论
为什么被折叠?



