c语言中释放结点的函数 c语言中申请结点和释放结点的函数分别是什么?
c语言,删除指定段节点函数。
p1 = head;
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站设计、外贸营销网站建设、清镇网络推广、微信小程序开发、清镇网络营销、清镇企业策划、清镇品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供清镇建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
p = head-next;
while(p-next != NULL)//当链表下个节点不是末尾时
{
if((p-number mink)||(p-number maxk))//如果节点值不满足条件,则删除该节点
{
p = p-next;
p1-next = p;
}
else //寻找下一个节点
{
p =p-next;
p1 = p1-next;
}
}
C语言链表中释放内存函数的问题,请高手解答。
首先你要搞明白,List本身已经被定义为Node*类型,因此List*实际上是一个二级指针
你的疑问中,如果改成*list = p-next,运行应该是可以通过的。但是不推荐这样做。为什么呢?
这就要先理解FreeMem这个函数,为什么用List*做参数,而不是List。如果只是为了释放链表内存,只要一级指针就可以了,用二级指针只会增加代码的复杂程度,降低可读性。二级指针的作用就在于,在这个函数内,你可以修改这个函数的主调函数(比如main函数)中链表头结点的指针值。在这个例子中,显而易见的就是,链表释放了内存,head指针应该是NULL。
如果上面这段话你能明白的话,那么我的建议是,使用你问题中“可行”的那段代码,并添加*list = NULL;在结尾。或者这样做也可以达到同样的效果:传入参数使用一级指针,配合函数的返回值来保证功能的完整性,这样调用的时候需要诸如head = FreeMem(head);以达到释放内存后置head指针为NULL的目的。
看了楼主的追问,看来楼主对二级指针的理解还不太到位。其实mornslit兄的解释已经说清楚你这种写法的问题在哪了。我再帮你分析下:
pt = p-next;
*list = p-next;
这两种写法,效果是一样的,都是保存了下一个节点的地址(也就是p-next的值)
list = p-next;
这种写法,是保存了p这个节点的next指针的地址,通过*运算,看似可以获取next的值,其实在p被free掉之后,next指针本身的值已经不能保证了
简言之,你错在哪了:p-next是下一个节点的地址,是与p共存亡的,你可以保存p-next的值,但不应该保存它的地址
说实话,还是建议楼主先搞清楚为什么要用二级指针,杀鸡用牛刀未必一定好~
C语言 释放结点问题
你好,你这个时候不能用free(pDel),因为这个时候pDel已经不再指向6这个节点了。而是指向7.你应该另外定义一个指针变量p当pDel找到6时,先让p = pDel,这样p就指向6了,然后再pDel-next=pDel-next-next,最后free(p)即可。不懂可以追问~
C语言中 静态链表中结点占据的内存空间需要程序员自己释放 这个说法正确吗 谢谢!
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;}
分享标题:c语言中释放结点的函数 c语言中申请结点和释放结点的函数分别是什么?
本文来源:http://scyanting.com/article/ddedeho.html