开发者社区> 问答> 正文

C语言双向循环链表删除节点问题 400 请求报错 

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

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

展开
收起
kun坤 2020-05-29 22:52:07 455 0
1 条回答
写回答
取消 提交回答
  • ……###### 我已经完全跟不上你的思维了!!
    你这代码的可读性也太差了吧!!
    这个GetAddr()的宏有malloc空间出来了吗?貌似没有吧?
    请确保你所释放的指针所指向的是你所申请得到的! ######

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

    我已经完全跟不上你的思维了!! 你这代码的可读性也太差了吧!! 这个GetAddr()的宏有malloc空间出来了吗?貌似没有吧? 请确保你所释放的指针所指向的是你所申请得到的!

    http://www.oschina.net/question/1024056_2147781
    我之前整个都贴出来了的.......请帮忙更正。

    2020-05-29 22:52:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载