如下链表放在结构体里面,我用下面的方法删除节点会出错,请问怎么释放节点:
//Á´±íÉêÃ÷
typedef struct _list_head{
struct _list_head *prev;
struct _list_head *next;
}list_head,*Plist_head;
//½á¹¹ÌåÉêÃ÷
typedef struct _MyStruct{
int age;
list_head list;
}mystruct;
//ɾ³ý½Úµã
Plist_head DeleteNode(Plist_head head,int data)
{
mystruct *ms=NULL;
Plist_head dNode=FindNode(head,data);
Plist_head bNode=head;
if(dNode==head)
bNode=head->next;//µ±É¾³ýÍ·½áµãʱ£¬°ÑÍ·µÄºó¼Ìµ±±íÍ·¡£
if(dNode)
{
dNode->prev->next=dNode->next;
dNode->next->prev=dNode->prev;
ms=GetAddr(mystruct,dNode,list);
free(ms);//ÕâÀïÓÐÎÊÌ⣬²»ÖªµÀÔõôÊͷŸýڵãÒÔ¼°°üº¬¸Ã½ÚµãµÄ½á¹¹Ìå¡£
//free(dNode);
}
else
return NULL;
return bNode;
}
其中:
//¸ù¾Ý½á¹¹Ìå³ÉÔ±µÄµØÖ·ÕÒµ½½á¹¹ÌåµÄÆðʼµØÖ· #define GetAddr(type,addr,member) \ ((type *)((char *)addr-(unsigned long *)(&((type *)0)->member)))
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
……###### 我已经完全跟不上你的思维了!!
你这代码的可读性也太差了吧!!
这个GetAddr()的宏有malloc空间出来了吗?貌似没有吧?
请确保你所释放的指针所指向的是你所申请得到的! ######
http://www.oschina.net/question/1024056_2147781
我之前整个都贴出来了的.......请帮忙更正。