当前位置: 技术问答>linux和unix
关于free指针的指针分量
来源: 互联网 发布时间:2016-01-30
本文导语: typedef struct TypeLink { char *pcField; char *pcValue; struct TypeLink *next; }Link; 我会根据需要动态分配pcField和pcValue的空间,问题是,释放的时候出问题。提示段错误。肯定是指针问题。但是我以前...
typedef struct TypeLink
{
char *pcField;
char *pcValue;
struct TypeLink *next;
}Link;
我会根据需要动态分配pcField和pcValue的空间,问题是,释放的时候出问题。提示段错误。肯定是指针问题。但是我以前编写类似函数没错啊。
函数是:
void lib_Del_Link_All(Link **node)
{
if(*node==NULL)
return;
if((*node)->next!=NULL)
{
lib_Del_Link_All(&(*node)->next);
}
if((*node)->next==NULL)
{
free((*node)->pcField);//这里出错
free((*node)->pcValue);//这里出错
*node=0;
}
}
{
char *pcField;
char *pcValue;
struct TypeLink *next;
}Link;
我会根据需要动态分配pcField和pcValue的空间,问题是,释放的时候出问题。提示段错误。肯定是指针问题。但是我以前编写类似函数没错啊。
函数是:
void lib_Del_Link_All(Link **node)
{
if(*node==NULL)
return;
if((*node)->next!=NULL)
{
lib_Del_Link_All(&(*node)->next);
}
if((*node)->next==NULL)
{
free((*node)->pcField);//这里出错
free((*node)->pcValue);//这里出错
*node=0;
}
}
|
怎么看后面两个if, 怎么觉得别扭.
自己gdb走一下吧
自己gdb走一下吧
|
链表太长,递归调用,栈溢出.
|
用个while循环来free
|
不是原因,但也有这个问题:
free((*node)->pcField);
free((*node)->pcValue);
*node=0;
--〉
free((*node)->pcField);
free((*node)->pcValue);
free((*node));
*node=NULL;
free((*node)->pcField);
free((*node)->pcValue);
*node=0;
--〉
free((*node)->pcField);
free((*node)->pcValue);
free((*node));
*node=NULL;
|
lib_Del_Link_All(&(*node)->next);
看不懂优先级了
改成
lib_Del_Link_All(&((*node)->next));
试试
看不懂优先级了
改成
lib_Del_Link_All(&((*node)->next));
试试