在while循环中释放内存会不断陷入无限循环

丁格盒

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

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

您得到无限循环的原因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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章