能这样思考是好的。不过想想内存是用什么郑毁标识的。要释放的是内存,而不是内存里面存储的内容。我们malloc出一块内存,是为了往里存放数据,但是里面存放的数据不清悄是这段内存的标识,因为这些数据是不确定的,只有指向这段内存的答丛渣指针才是这个内存块的标识。
成都创新互联是专业的鹿寨网站建设公司,鹿寨接单;提供网站建设、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行鹿寨网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
因为free函数仅仅是告诉操作早念系统,这一块内存被释放了,可以培宏用来作其它用途。但是,由于你没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化。所以输出陆中困值不变。
通常建议,将这个p用完了也置NULL
free(q); 释放q指针所凳举拥有的资源,告诉系统,本程序不再使用该内存地址(free的功能就是这个)
q=q-next; 然后磨梁继续引用该地址瞎粗运,则程序可能会死掉!
首先肯定你的主动思考,学习的主动性
然后明确说,malloc/free有多种不同的实现,可以认为都是采用第二种办法,或者变相采用第二种办法。
首先说静态变量行不衫厅通,不太可能只调用一次malloc,调第二次就覆盖掉了,行不通。
一般的实现,是把分配内存的长度等信息放在malloc来的指针的前面,用一个小结构来记录分配的大小以及状态信息,想要查证也不难,去下载一些源代码阅读一下就行。
至于你说的释放最近仔键一次分配的内存,是另一个话题,涉及到内存泄漏。
举个念塌巧小片段:
char *a = (char *)malloc(100);
a = (char *)malloc(100);
free(a);
分配了两次,只能free最后一次分配的,前一次分配的,丢掉了,找不回来。
这个最后一次,指的是这个意思
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款