求教动态链表释放的问题

tonystack0804 2012-11-15 04:35:58
while (p1->getgcv_buf != 0) //如果获取到了gc_RcvBuf的值
{
n++;
if (n == 1)
{
head = p1; //把p1所指的结点作为第一个结点
}
else
{
printf("the information of new node is :%s\n", p1->getgcv_buf); //输出每个结点的中的内容
p2->next = p1; //下一个结点的地址为新结点的地址
p2 = p1;
p1 = (struct RecvLink *)malloc(LEN);
p1->getgcv_buf = gc_RcvBuf;
}

这段代码该如何用free来释放?想了半天没头绪
...全文
210 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluegem218 2012-11-15
  • 打赏
  • 举报
回复

if (n == 1)
{
head = p1;	 //把p1所指的结点作为第一个结点
free(p1);
}
else
{
printf("the information of new node is :%s\n", p1->getgcv_buf); //输出每个结点的中的内容
p2->next = p1;	//下一个结点的地址为新结点的地址
p2 = p1;
free(p1);  // ********* << 这里最好释放一次,否则容易报错,或者造成内存浪费。********//
p1 = (struct RecvLink *)malloc(LEN);
p1->getgcv_buf = gc_RcvBuf;
}
Seffrui_M 2012-11-15
  • 打赏
  • 举报
回复
好深奥 请问大一链表应该学到什么程度
newtee 2012-11-15
  • 打赏
  • 举报
回复
你想free掉什么? 如果你free了 对于返回值是否有影响是需要考虑的 如果无影响直接在函数最后面free掉就行了
转角天边 2012-11-15
  • 打赏
  • 举报
回复
引用 楼主 tonystack0804 的回复:
while (p1->getgcv_buf != 0) //如果获取到了gc_RcvBuf的值 { n++; if (n == 1) { head = p1; //把p1所指的结点作为第一个结点 } else { printf("the information of new node is :%s\n", p1->getgcv_buf); //输出……
在循环外面delete(head)
tonystack0804 2012-11-15
  • 打赏
  • 举报
回复
struct RecvLink { char * getgcv_buf; struct RecvLink * next; }; /////////////////////////////////////////////////////// DWORD WINAPI Linked_list(LPVOID pParam) { /* struct RecvLink * pt;*/ int LEN = sizeof(struct RecvLink); struct RecvLink * head = NULL; struct RecvLink * p1 = NULL, * p2 = NULL; p1 = p2 = (struct RecvLink *)malloc(LEN); //开辟的新单元强制转换成(struct RecvLink *类型) EnterCriticalSection(&cri_recv); p1->getgcv_buf = gc_RcvBuf; //获取gc_RcvBuf的值 /* LeaveCriticalSection(&cri_recv);*/ while (p1->getgcv_buf != 0) //如果获取到了gc_RcvBuf的值 { n++; if (n == 1) { head = p1; //把p1所指的结点作为第一个结点 } else { struct RecvLink * n = head; free(head); head = p1->next; printf("the information of new node is :%s\n", p1->getgcv_buf); //输出每个结点的中的内容 p2->next = p1; //下一个结点的地址为新结点的地址 p2 = p1; p1 = (struct RecvLink *)malloc(LEN); p1->getgcv_buf = gc_RcvBuf; } /* EnterCriticalSection(&cri_recv);*/ LeaveCriticalSection(&cri_recv); Sleep(10); } p2->next = NULL; // NEXT 为空 return 0; }
derekrose 2012-11-15
  • 打赏
  • 举报
回复
这个代码没有上下文啊,如果仅仅是这段代码,好像delete(p1)就可以了吧

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧