C++函数free和delete如何操作指针?

别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。

用调试器跟踪示例7-5,发现指针p被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了“野指针”。如果此时不把p设置为NULL,会让人误以为p是个合法的指针。

如果程序比较长,我们有时记不住p所指的内存是否已经被释放,在继续使用p之前,通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。

char *p = (char *) malloc(100);

strcpy(p, “hello”);

free(p);        // p 所指的内存被释放,但是p所指的地址仍然不变

if(p != NULL)   // 没有起到防错作用

{

strcpy(p, “world”);  // 出错

}

示例7-5  p成为野指针

C++函数free和delete如何操作指针?相关推荐

  1. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  2. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

  3. 【STL】string详解(string类常用的操作函数、构造函数、赋值操作、子符串的拼接、查找和替换、比较、存取、插入和删除、获取)

    目录 1. string容器 简介 2. string类常用的操作函数 3. 构造函数 4. 赋值操作 5. 字符串拼接 6. 字符串查找和替换 7. 字符串比较 8. 字符串存取 9. 字符串插入和 ...

  4. C++的指针的坑:“new[]的指针需要delete[]”和“子类指针可以转父类指针”的两条规则成功的冲突到了一起...

    原文地址:http://www.cppblog.com/vczh/archive/2013/04/27/199765.html posted on 2013-04-27 17:24 陈梓瀚(vczh) ...

  5. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  6. php中文件操作函数,php中常用文件操作函数介绍

    小编今天来给php初学者介绍php文件操作的常用函数使用方法总结,包括:文件读写,创建,查看文件属性,文件删除等等关于文件的操作. 在对一个文件进行访问之前,一般我们都需要判断文件是否存在,以免调用了 ...

  7. linux 文件操作函数,Linux下的文件操作函数及creat用法

    编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]. ...

  8. PYDay6- 内置函数、验证码、文件操作、发送邮件函数

    1.内置函数 1.1Python的内置函数 abs() dict() help() min() setattr() all() dir() hex() next() slice() any() div ...

  9. main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)

    一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...

最新文章

  1. 【动态规划】背包模型
  2. Arch Linux PDF格式文件无法显示中文
  3. UVa739 Soundex Indexing
  4. MariaDB表表达式(2):CTE
  5. 基于ArcGIS JS API实现垂直滑动缩放条
  6. python实现struct_Python实现结构体代码实例
  7. B05_NumPy从数值范围创建数组(numpy.arange,numpy.linspace,numpy.logspace)
  8. 【PAT甲级 删除字符串中的指定字符】1050 String Subtraction (20 分) C++
  9. java和vue2.0
  10. Asp.Net回车键触发Button的OnClick事件解决方案
  11. jop怎么读音英语怎么说_“跨年”英语怎么说?
  12. redhat solutions
  13. 冷凝器换热效果变差后果
  14. pom文件中配置repositories
  15. cad图纸问号怎么转换文字_CAD图纸上字体显示问号怎么办?cad文字显示问号三种解决方法...
  16. 不用镜像,也不下载安装包,windows下安装Ruby
  17. 三思而行 --jsp基础篇
  18. linux下usb 驱动
  19. python实验报告代写_Python 读写CSV作业代写代做、代写Python I/O文件读写程序作业、代写代做python 实验报告...
  20. JAVA设计模式第三讲:结构型设计模式

热门文章

  1. Swift学习:字符串和字符(Strings and Characters)
  2. c# 用正则表达式获取开始和结束字符串中间的值
  3. Leetcode 169 Majority Element
  4. 【Java】TCP Socket编程案例——文件传输聊天工具
  5. Android 7.0动态权限大总结
  6. Laravel教程 四:数据库和Eloquent
  7. Nginx upstream性能优化
  8. 登录tomcat服务器首页直接跳转到项目
  9. linux系统rootkit恶意软件安全检测工具rkhunter安装部署、使用详解
  10. C++输出斐波那契数列的几种方法