C++学习之指针的常见错误
      我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程序中,并且它仍然会指向原来的内存空间。这时候如果你忘记了这点而再次尝试使用这个指针的时候,那么将会导致程序出错。
        这种错误非常难于调试,因为这种值得改变不太容易使人联想到时被删除的安格指针导致的错误,因此在删除一个指针以后,我们一定要将它赋值为空,虽然使用空指针的时候是违法的,容易使程序崩溃,但是,有时候我们宁愿让程序崩溃也不愿意调试这种难于觉察的错误。
        这种隐藏的错误可以从下面这个例子中体现出来:
        #include<iostream>
        using namespace std;
        int main()
        {
                int *p=new int;
                *p=4;
                cout<<"将4赋给p的地址以后,指针p读取的值:\t"<<*p<<endl;
                delete p;
                cout<<"删除P指向的空间以后,指针p读取的值为:\t\t"<<*p<<endl;
                long *p1=new long;
                cout<<'创建新空间以后,指针p1中保存的地址:\t"<<p1<<endl;
               *p1=12423;
                cout<<"指向新空间以后,指针P1中保存的地址为:"<<p1<<endl;
                *p=23;
               
cout<<"将23赋给p的地址以后,指针p读取的值:\t"<<*p<<endl;
                cout<<"将23赋给p的地址以后,指针p1读取的值:\t"<<*p1<<endl;
                delete p1;
                return 0;
         }
          运行这个程序,会发现指针p和p1读取的值都为23,由于编译器会默认将释放掉的内存空间回收然后分派给新开辟的空间,因此的10行新定义了指向新开辟的long型变量空间的指针p1以后,这个p1指针指向的空间实际上就是被释放的空间,也就是P原来指向的空间,这种错误非常之难调试,因为这种值的改变不容易令人联想到的是被删除的那个指针导致的错误,因此在删除一个指针以后,一定要将其赋值为空,虽然使用空指针是违法的,容易使程序奔崩溃,但是我们宁愿程序崩溃,也不愿意它调试起来很困难。

C++学习之指针的常见错误的更多相关文章

  1. C语言学习笔记--内存操作常见错误

    1. 野指针 (1)指针变量中的值是非法的内存地址,进而形成野指针 (2)野指针不是 NULL 指针,是指向不可用内存地址的指针 (3)NULL 指针并无危害,很好判断,也很好调试 (4)C 语言中无 ...

  2. c指针参数常见错误

    参数的地址是可以修改的,修改后的地址是不可能传回给调用处的指针变量.也就是说,可以修改参数地址所指的单元的值,这是可以传回到调用处的变量里面的. #include <stdio.h> #i ...

  3. maven学习(5)-maven中常见错误

    maven报错非法字符:\65279 错误 开发中一个项目很早就报这个错,maven报错非法字符:\ 错误, 开发过程中偶尔会遇到,今天终于下决心要解决这个问题 编译java 文件的时候,有些java ...

  4. SpringBoot学习之pom文件常见错误

    错误1 上图的错误需要添加jar包的版本号,springboot自动生成不需要添加版本号,手动添加的需要指定版本号. 所以pom.xml如下方式:

  5. CUBRID学习笔记 7 ms常见错误

    基本不是权限问题,就是dll问题.  重新下载或应用dll注意版本. 权限的问题,先本机测试. 看看在web管理有无问题.  剩下的基本就简单了 欢迎转载 ,转载时请保留作者信息.本文版权归本人所有, ...

  6. Python学习笔记: pip install 常见错误汇总

    本机环境RHEL8, Python3.9 pip install: 无法安装最新版本的包 在pypi上查看pkg的页面,因为有些pip包的版本对特定的python版本有要求 pip install e ...

  7. (通用)深度学习环境搭建:tensorflow安装教程及常见错误解决

    区别于其他入门教程的"手把手式",本文更强调"因"而非"果".我之所以加上"通用"字样,是因为在你了解了这个开发环境之后 ...

  8. Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

    Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇 ...

  9. 学习笔记之C/C++指针使用常见的坑

    https://mp.weixin.qq.com/s/kEHQjmhNtSmV3MgHzw6YeQ 避免内存泄露 不再用到的内存没有释放,就叫做内存泄露 在C/C++中,通过动态内存分配函数(如mal ...

随机推荐

  1. Oracle方向

    从毕业到现在工作已经4年了,入职前去过私企,干过外企,当前到了国企,各有各的不同,对于不同的人,有不同的适合的选择. 这几年的工作中也积累了不少知识,业务上的.技术上的,但始终觉得没有掌握一门核心,没 ...

  2. AngularJs(五)从Controller控制器谈谈$scope作用域

    大纲 用于简单示例和简单应用的controller 应用 多个controller应用的作用域问题 controller继承作用域问题 Controller的创建 AngularJs controll ...

  3. DOM 样式操作

    通过js动态的修改样式 更新样式的方法:一.使用.style方法修改样式,缺点是使样式混杂在js中,再次修改不易.二.更新class属性,更改样式.三.一次性更改很多元素样式(如换肤操作),更改样式表 ...

  4. gtest的Linux使用(Google test)

    GTest是Google开发的跨平台而且开源的C++单元测试框架,很好很强大. 下载地址:https://code.google.com/p/googletest/ . 关于GTest在Windows ...

  5. leetcode Binary Search Tree Iterator python

    # Definition for a binary tree node # class TreeNode(object): # def __init__(self, x): # self.val = ...

  6. MySQL管理一些基础SQL语句

    .进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; .查询所有数据的大小: ),),'MB') as data from i ...

  7. HTML5 canvas准备知识

    利用canvas来进行画图工作.因此,我们有必要进行一些画图方面的术语说明. 一.画布 在日常生活中,如果我们要画画,可以找纸.板.画布等等工具.而在网页元素中,我们只需要定义一个标签即可. < ...

  8. MySQL远程(IP)连接报错:Host 'IP地址' is not allowed to connect to this MySQL server

    ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server这是告诉你没有权限连接指定IP的主机,下面我们 ...

  9. CSS3 Gradient-CSS3渐变

    CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变).而我们今天主要是针对线性渐变来剖析其具体的用法.为了更好的应用CSS3 Gradi ...

  10. windows下载安装requests

    1.下载地址:https://github.com/kennethreitz/requests 2.解压缩后,cd requests 3.安装 python setup.py install