c - 在while循环中释放内存不断陷入无限循环
问题描述
我只是想让这个while循环遍历每个插槽party -> fragments
并释放每个点,如果它不是NULL,但是当我去运行它时,它似乎陷入了无限循环。如果我插入一个 else 并中断它,它会运行,但我仍然有内存泄漏。
while(i < party -> num_active_fragments)
{
if(party -> fragments[i] != NULL)
{
free(party -> fragments[i]);
i++;
}
}
解决方案
这里的问题是i++
应该不在 if 语句中。无限循环是因为一个元素为 NULL 并且在该迭代i
中没有增加,并且同样重复发生。
正如人们评论的那样,没有必要检查该值是否为 NULL。
正如@thebusybee 评论的那样,您应该将释放的指针设置为NULL。
您的代码可能如下所示:
while(i < party->num_active_fragments)
{
free(party->fragments[i]);
party->fragments[i] = NULL;
i++;
}
推荐阅读
- javascript - 正则表达式在javascript中的某物之间查找字符串
- python - 如何修复 Django 中的“TemplateDoesNotExist at /admin/login/django/forms/widgets/text.html”错误??
- sql - 使用 MariaDB 在一个表中插入具有来自另一个表的值的行
- java - 显示来自 SQLite 数据库 android studio 的用户名
- selenium - 无法确定带有嵌套 SVG 元素的 XPATH
- kotlin - Kotlin 地图地图中的括号表示法
- r - “ts”对象中的错误必须有一个或多个观察值
- c# - 如何拆分特定格式的字符串并将其分配给c#中的变量?
- mongodb - MongoDB 作为 docker 容器 - 如何从外部文件导入文档
- python - 在 Altair LayerChart 中指定绘图标题和构面标题