C语言双向循环链表删除节点问题

啊呀呦 发布于 2016/01/07 14:11
阅读 119
收藏 0

如下链表放在结构体里面,我用下面的方法删除节点会出错,请问怎么释放节点:

//Á´±íÉêÃ÷
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)))



加载中
0
木兰宿莽
木兰宿莽

我已经完全跟不上你的思维了!!

你这代码的可读性也太差了吧!!

这个GetAddr()的宏有malloc空间出来了吗?貌似没有吧?

请确保你所释放的指针所指向的是你所申请得到的!

0
啊呀呦

引用来自“木兰宿莽”的评论

我已经完全跟不上你的思维了!!

你这代码的可读性也太差了吧!!

这个GetAddr()的宏有malloc空间出来了吗?貌似没有吧?

请确保你所释放的指针所指向的是你所申请得到的!

http://www.oschina.net/question/1024056_2147781

我之前整个都贴出来了的.......请帮忙更正。

返回顶部
顶部