C++函数free和delete如何操作指针?
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如何操作指针?相关推荐
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...
五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...
- 【STL】string详解(string类常用的操作函数、构造函数、赋值操作、子符串的拼接、查找和替换、比较、存取、插入和删除、获取)
目录 1. string容器 简介 2. string类常用的操作函数 3. 构造函数 4. 赋值操作 5. 字符串拼接 6. 字符串查找和替换 7. 字符串比较 8. 字符串存取 9. 字符串插入和 ...
- C++的指针的坑:“new[]的指针需要delete[]”和“子类指针可以转父类指针”的两条规则成功的冲突到了一起...
原文地址:http://www.cppblog.com/vczh/archive/2013/04/27/199765.html posted on 2013-04-27 17:24 陈梓瀚(vczh) ...
- C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)
每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...
- php中文件操作函数,php中常用文件操作函数介绍
小编今天来给php初学者介绍php文件操作的常用函数使用方法总结,包括:文件读写,创建,查看文件属性,文件删除等等关于文件的操作. 在对一个文件进行访问之前,一般我们都需要判断文件是否存在,以免调用了 ...
- linux 文件操作函数,Linux下的文件操作函数及creat用法
编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]. ...
- PYDay6- 内置函数、验证码、文件操作、发送邮件函数
1.内置函数 1.1Python的内置函数 abs() dict() help() min() setattr() all() dir() hex() next() slice() any() div ...
- main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)
一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...
最新文章
- 【动态规划】背包模型
- Arch Linux PDF格式文件无法显示中文
- UVa739 Soundex Indexing
- MariaDB表表达式(2):CTE
- 基于ArcGIS JS API实现垂直滑动缩放条
- python实现struct_Python实现结构体代码实例
- B05_NumPy从数值范围创建数组(numpy.arange,numpy.linspace,numpy.logspace)
- 【PAT甲级 删除字符串中的指定字符】1050 String Subtraction (20 分) C++
- java和vue2.0
- Asp.Net回车键触发Button的OnClick事件解决方案
- jop怎么读音英语怎么说_“跨年”英语怎么说?
- redhat solutions
- 冷凝器换热效果变差后果
- pom文件中配置repositories
- cad图纸问号怎么转换文字_CAD图纸上字体显示问号怎么办?cad文字显示问号三种解决方法...
- 不用镜像,也不下载安装包,windows下安装Ruby
- 三思而行 --jsp基础篇
- linux下usb 驱动
- python实验报告代写_Python 读写CSV作业代写代做、代写Python I/O文件读写程序作业、代写代做python 实验报告...
- JAVA设计模式第三讲:结构型设计模式
热门文章
- Swift学习:字符串和字符(Strings and Characters)
- c# 用正则表达式获取开始和结束字符串中间的值
- Leetcode 169 Majority Element
- 【Java】TCP Socket编程案例——文件传输聊天工具
- Android 7.0动态权限大总结
- Laravel教程 四:数据库和Eloquent
- Nginx upstream性能优化
- 登录tomcat服务器首页直接跳转到项目
- linux系统rootkit恶意软件安全检测工具rkhunter安装部署、使用详解
- C++输出斐波那契数列的几种方法