【发布时间】:2017-06-29 06:29:30
【问题描述】:
struct Link
{
frame_t *frame;
struct Link *next;
} typedef link_t;
在里面我为 frame_t 分配内存 我尝试递归地释放它,但是当我运行它时程序崩溃了。
struct Frame
{
char *name;
unsigned int duration;
char *path;
} typedef frame_t;
在其中我为名称和路径分配内存。
void freeFrames(link_t** head)
{
if (*head != NULL)
{
if ((*head)->next != NULL)
{
free((*head)->frame->name);
free((*head)->frame->path);
free((*head)->frame);
freeFrames(&((*head)->next));
}
free(*head);
}
}
我怎样才能为此释放内存?
【问题讨论】:
-
你还需要检查
(*head)->frame是否不为NULL。 -
没有看到整个程序就不可能知道为什么它崩溃了,但是你的 freeFrames 函数是错误的,由于冗余的
if ((*head)->next != NULL)检查,它不会释放列表的最后一个元素的框架. -
摆脱指针和递归将是第一步。
-
你不认为在做
free(*head);之前你还需要一些条件吗?
标签: c memory-management memory-leaks