看C语言的书中说“释放存储空间”,是什么意思?什么叫做释放,为什么叫…
就是通知操作系统,先前申请的指定部分的变量所使用的空间不再使用,使用权交还给操作系统,以便分配给其它程序使用。
即是说C/C++ 都需要主动释放动态申请的内存。试着解释下为什么要主动释放动态申请的内存:动态申请的内存,存储在堆中,编译器不会自己回收,回收的意义:通俗讲就是告诉编译器,这片内存可以使用。
C管理内存大致可以理解为两种,一个是分配在栈上的,另一个是分配在堆上的。临时变量,动态变量,分配在栈上,运行完,直接弹出栈,就没了。分配在堆上的内存,释放的时候,基本上可以理解为,指针不指这里了。
在c语言中,在某个大括弧引起来的区域(如函数、子程序的)内你定义了一个变量,这个变量在程序跳出这个反括号时,就会被自动舍弃。c++中的情况也类似。
C语言中是如何释放内存单元的;原理又是什么?
1、从C语言本身设计来说,不会释放。所谓动态内存,是由malloc系列函数进行申请的内存,除非在程序中使用free释放,否则该段内存不会被释放掉。从这个角度来说,即使进程结束,该段内存也会被占用。这种现象被称为内存泄露。
2、函数参数中直接传入一块足够大的缓冲区指针,用完由调用方自己释放。微软的API函数就经常采用这种方式,经常需要我们传入一个缓冲区指针。
3、就是通知操作系统,先前申请的指定部分的变量所使用的空间不再使用,使用权交还给操作系统,以便分配给其它程序使用。
4、在C语言中,使用malloc来动态申请内存,申请完后必须释放该空间。
5、变量用delete释放,数组用delete[]释放,指针的类型不能改变。对于一些简单的情况(所有成员都是基本数据类型,没有析构函数),可以直接用delete释放。
6、增加就是先检查你的数组中有没有-1的元素,如果有,就设置为你的值。如果全部都满了,就开一个更大的数组,把数据拷贝过去。把相应位后面的一次前移一位,就是实现了删除操作,可以用个for循环就可以实现了。
c语言释放内存的问题
1、没有回收动态申请内存的机制。需要主动释放。JAVA等高级语言有这种机制。刚查了下貌似C++确实没有。即是说C/C++ 都需要主动释放动态申请的内存。
2、C管理内存大致可以理解为两种,分配在栈上的,一个是分配在堆上的。临时变量,动态变量,分配在栈上,运行完,直接弹出栈,就没了。分配在堆上的内存,释放的时候,基本上可以理解为,指针不指这里了。
3、c的内存泄露主要是出在指针上面。对于变量,系统都会在用完后自动释放的。
4、可以释放,理由如下:我们知道函数free(p)的工作方式是将变量p的值所代表的内存块释放掉。在test函数中,返回一个指针变量buff,事实上,这个buff的值就是申请到的内存块的起始位置。
5、在这个例子中,显而易见的就是,链表释放了内存,head指针应该是NULL。如果上面这段话你能明白的话,那么我的建议是,使用你问题中“可行”的那段代码,并添加*list = NULL;在结尾。