我只是想让这个while循环通过每个插槽party -> fragments
并释放每个点(如果它不是NULL),但是当我运行它时,它似乎陷入了无限循环中。如果我插入else并在其中插入一个中断,它将运行,但是我仍然存在内存泄漏。
while(i < party -> num_active_fragments)
{
if(party -> fragments[i] != NULL)
{
free(party -> fragments[i]);
i++;
}
}
您得到无限循环的原因i
是,如果party->fragments[i]
没有则只会增加NULL
。
for
这种类型的循环不易出错,并且不会在循环体内修改循环索引:
for (i = 0; i < party->num_active_fragments; i++) {
if (party->fragments[i] != NULL) {
free(party->fragments[i]);
}
}
此外,您可以将null指针传递给free
它将忽略它们,并且应该将释放的指针设置NULL
为避免以后引用:
for (i = 0; i < party->num_active_fragments; i++) {
free(party->fragments[i]);
party->fragments[i] = NULL;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句