首页 > 解决方案 > 在while循环中释放内存不断陷入无限循环

问题描述

我只是想让这个while循环遍历每个插槽party -> fragments并释放每个点,如果它不是NULL,但是当我去运行它时,它似乎陷入了无限循环。如果我插入一个 else 并中断它,它会运行,但我仍然有内存泄漏。

  while(i < party -> num_active_fragments)
  {
    if(party -> fragments[i] != NULL)
    {
      free(party -> fragments[i]);
      i++;
    }
  }

标签: c

解决方案


这里的问题是i++应该不在 if 语句中。无限循环是因为一个元素为 NULL 并且在该迭代i中没有增加,并且同样重复发生。

正如人们评论的那样,没有必要检查该值是否为 NULL。

正如@thebusybee 评论的那样,您应该将释放的指针设置为NULL。

您的代码可能如下所示:

while(i < party->num_active_fragments)
{
    free(party->fragments[i]);
    party->fragments[i] = NULL;    
    i++;
}

推荐阅读