如下链表放在结构体里面,我用下面的方法删除节点会出错,请问怎么释放节点:
//Á´±íÉêÃ÷ 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
我之前整个都贴出来了的.......请帮忙更正。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。