C语言释放链表内存的问题

voidListFree(LinkListL){LNode*s=NULL;while(L){s=L;L=L->next;free(s);}}一运行到free处就出错0... void ListFree(LinkList L)
{
LNode *s = NULL;
while(L)
{
s = L;
L = L->next;
free(s);
}
}
一运行到free处就出错0
展开
 我来答
瓮瑗c
2013-11-29 · TA获得超过737个赞
知道小有建树答主
回答量:90
采纳率:0%
帮助的人:133万
展开全部
把链表创建的函数贴出来。否则难以判断。
还有LNode 和LinkList的类型定义贴出来

再请求一次,把LNode 和LinkList的类型定义贴出来!

从 L->next;的用法,我推测LinkList是一个结构体指针类型,,作用是指向链表头。可是你在malloc的时候,用的sizeof(LinkList)),也就是对指针类型取size,通常固定是4,也就是说的你原意是要申请一个结构体大小的buff,结果是申请到一个指针大小的buf

如果LinkList是一个结构体类型,而不是指针类型,那么s=L 这样的语句就是彻底错误的,要知道void ListFree(LinkList L),这里的L是局部变量,进入函数时从堆栈中得到的,而不是你malloc出来的。所以你的free一定是失败的。
追问
typedef struct LNode{
int x;
struct LNode *next;
}LNode,*LinkList;
其他部分写不下,已发你私信了
追答
两个malloc都改成malloc(sizeof(LNode));
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
tattackor
2015-10-26 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:892万
展开全部
1、如果是小程序,就算不释放一般没什么大后果,因为开内存比较小。因为这里的空间就是内存空间,如果不断申请的话,会占用大部分内存。如果不释放的话,就一直占用内存,使内存减小。直到关闭程序,内存才会释放。可以free函数释放内存。
2、free函数:
原型:void free(void *ptr);
功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存;
头文件:malloc.h或stdlib.h;
3、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:
int *a = NULL
int *b = (int*) malloc(sizeof(int) * 10);
a= b;
/* 执行大量操作后 */
if(a != NULL) {free(a);a=NULL;}
if(b != NULL) {free(b);b=NULL;}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-29
展开全部
LinkList 和 LNode* 是同一种类型吗,如果不是就会re,如果是也建议使用相同标识符
追问
typedef struct LNode{
int x;
struct LNode *next;
}LNode,*LinkList;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式