• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言之free函数以及野指针介绍

C语言之free函数以及野指针介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言free函数,c语言中free函数,c语言free函数头文件,c语言free,c语言中free的用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

【FROM MSDN && 百科】
原型:void free(void *ptr);
#include<stdlib.h>或#include <malloc.h>
Deallocate space in memory
释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及realloc函数来再分配。
注意:连续两次使用free函数,肯定会发生错误。malloc的次数要和free的次数相等。
A block of memory previously allocated using a call to malloc, calloc or realloc is deallocated, making it available again for further allocations.
If ptr does not point to a block of memory allocated with the above functions, the behavior is undefined.
If ptr is a null pointer, the function does nothing
Notice that this function does not change the value of ptr itself, hence it still points to the same (now invalid) location
DEMO:

造成“野指针”的原因主要有
1.指针变量没有初始化,
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。在初始化的时候要么指向合法的指针,要么指向NULL。

2.指针变量被free或delete之后,没有设置为NULL。它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。上文DEMO则是这种情况。

3.指针操作超越了变量的作用范围。注意其生命周期。

【下面是摘自论坛里面的形象比喻,加深理解。】
CRT的内存管理模块是一个管家。  
你的程序(简称“你”)是一个客人。  
管家有很对水桶,可以用来装水的。  
malloc的意思就是“管家,我要XX个水桶”。  
管家首先看一下有没有足够的水桶给你,如果没有,那么告诉你不行。如果够,那么登记这些水桶已经被使用了,然后告诉你“拿去用吧”。  
free的意思就是说:“管家我用完了,还你!”。  
至于你是不是先把水倒干净才给管家,那么是自己的事情了。--是不是清零。
  
管家也不会将你归还的水桶倒倒干清(他有那么多水桶,每个归还都倒干净岂不累死了)。反正其他用的时候自己会处理的啦。  
free之后将指针清零只是提醒自己,这些水桶已经不是我的了,不要再完里面放水了,^_^  
如果free了之后还用那个指针的话,就有可能管家已经将这些水桶给了其他人装饮料的了,你却往里面撒了泡尿。好的管家可能会对你的行为表示强烈的不满, 杀了你(非法操作)--这是最好的结果,你知道自己错了(有错就改嘛)。一些不好的管家可能忙不过来,有时候抓到你作坏事就惩罚你,有时候却不知道去那里 了--这是你的恶梦,不知道什么时候、怎么回事情自己就死了。不管怎么样,这种情况下很有可能有人要喝尿--不知道是你的老板还是你的客户了.^_^。  
所以啊,好市民当然是还了给管家的东西就不要再占着啦,.^_^。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言中free函数的使用详解
  • C语言之free函数以及野指针介绍

相关文章

  • 2017-08-27使用gcc在命令行中预定义宏
  • 2017-05-28C++实现动态绑定代码分享
  • 2017-05-28C读txt到二维数组的实现方法
  • 2017-05-28利用C语言替换文件中某一行的方法
  • 2017-05-28C++利用静态成员或类模板构建链表的方法讲解
  • 2017-05-28c语言冒泡排序法代码
  • 2017-05-28c语言尾队列tailq使用示例分享
  • 2017-08-27图像旋转(1.8编程基础之多维数组)
  • 2017-05-28浅析C++中单链表的增、删、改、减
  • 2017-05-28C++快速幂与大数取模算法示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用C语言实现vector动态数组的实例分享
    • 使用dc画笔画矩形、直线与椭圆示例
    • C++ 将文件数据一次性加载进内存实例代码
    • Cocos2d-x触摸事件实例
    • C语言中求余弦值的相关函数总结
    • 关于STL中list容器的一些总结
    • C语言 栈的表示和实现详细介绍
    • 解析C/C++中如何终止线程的运行
    • VS2010 C++ 配置优化方案
    • 使用map实现单词转换的实例分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有