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);
}
}
我怎样才能为此释放内存?
答案 0 :(得分:1)
if(name) free(name);
name = "hello"
,那么如果您尝试这样做,您的程序将会失败。此外,你有一个内存泄漏(偷了那个来自n.m。的评论......):
if ((*head)->next != NULL)
{
free((*head)->frame->name);
free((*head)->frame->path);
free((*head)->frame);
// ^ you will only free, if there is a successor node!
// so you won't free them on the last node!
freeFrames(&((*head)->next));
}
应该是(到目前为止还没有添加NULL检查!):
if(*head)
{
free((*head)->frame->name);
free((*head)->frame->path);
free((*head)->frame);
if ((*head)->next != NULL)
{
freeFrames(&((*head)->next));
}
free(*head);
}
另外:你没有给头部指定任何东西(*head = NULL;
),为什么你有双指针?
void freeFrames(link_t* head);
就足够了......
并且不需要递归,只要有任何指针就可以推进指针:
void freeFrames(link_t* head)
{
while(head)
{
// free members, don't forget the NULL checks
link_t* tmp = head;
head = head->next;
free(tmp);
}
}