我只是想让这个 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]);
}
}
此外,您可以将空指针传递给将忽略它们的
free
,并且您应该将释放的指针设置为 NULL
以避免以后引用:for (i = 0; i < party->num_active_fragments; i++) {
free(party->fragments[i]);
party->fragments[i] = NULL;
}
关于c - 在 while 循环中释放内存不断陷入无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60133360/