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 展开
{
LNode *s = NULL;
while(L)
{
s = L;
L = L->next;
free(s);
}
}
一运行到free处就出错0 展开
展开全部
把链表创建的函数贴出来。否则难以判断。
还有LNode 和LinkList的类型定义贴出来
再请求一次,把LNode 和LinkList的类型定义贴出来!
从 L->next;的用法,我推测LinkList是一个结构体指针类型,,作用是指向链表头。可是你在malloc的时候,用的sizeof(LinkList)),也就是对指针类型取size,通常固定是4,也就是说的你原意是要申请一个结构体大小的buff,结果是申请到一个指针大小的buf
如果LinkList是一个结构体类型,而不是指针类型,那么s=L 这样的语句就是彻底错误的,要知道void ListFree(LinkList L),这里的L是局部变量,进入函数时从堆栈中得到的,而不是你malloc出来的。所以你的free一定是失败的。
还有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 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
展开全部
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;}
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询