C 如何在多维动态结构中释放动态字符串?
在内部,我为帧\u t分配内存 我尝试递归地释放它,但当我运行它时程序崩溃了C 如何在多维动态结构中释放动态字符串?,c,memory-management,memory-leaks,C,Memory Management,Memory Leaks,在内部,我为帧\u t分配内存 我尝试递归地释放它,但当我运行它时程序崩溃了 struct Link { frame_t *frame; struct Link *next; } typedef link_t; 在这里面,我为名称和路径分配内存 struct Frame { char *name; unsigned int duration; char *path; } typedef frame_t;
struct Link
{
frame_t *frame;
struct Link *next;
} typedef link_t;
在这里面,我为名称和路径分配内存
struct Frame
{
char *name;
unsigned int duration;
char *path;
} typedef frame_t;
我怎样才能为这个释放内存
if(name)free(name)代码>
name=“hello”
,您的程序在尝试执行此操作时肯定会失败*head=NULL;
),那么为什么要使用双指针呢
if(*head)
{
free((*head)->frame->name);
free((*head)->frame->path);
free((*head)->frame);
if ((*head)->next != NULL)
{
freeFrames(&((*head)->next));
}
free(*head);
}
就足够了
并且不需要递归,只要存在以下情况,就可以简单地推进指针:
void freeFrames(link_t* head);
您还需要检查
(*head)->frame
是否不为空。请提供一个。如果(*head)->next!=NULL,则无法在没有看到整个程序的情况下说出它崩溃的原因,但您的freeFrames函数是错误的,它将无法释放列表最后一个元素的帧,这要感谢冗余的
check。第一步是去掉指向指针和递归的指针。在执行free(*head)之前,你不想想吗代码>您还需要一些条件吗?
if(*head)
{
free((*head)->frame->name);
free((*head)->frame->path);
free((*head)->frame);
if ((*head)->next != NULL)
{
freeFrames(&((*head)->next));
}
free(*head);
}
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);
}
}