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. PHP与MySQL交互

    <?php $con = mysql_connect("localhost","root","12345"); $dbcharset ...

  2. Sizzle之tokenize

    在Sizzle里,大体思路,当为复合选择器时,判断是否支持querySeletorAll,如果不支持则调用自写方法select. select的功能十分冗长,下面先分析tokenize 在tokeni ...

  3. OC中文件的操作

    OC中文件操作,在之前的文章中,已经接触到了文件的创建了,但是那不是很具体和详细,这篇文章我们就来仔细看一下OC中是如何操作文件的: 第一.首先来看一下本身NSString类给我们提供了哪些可以操作文 ...

  4. Intellij IDEA+Maven+SpringMVC+HiBernate

    转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生). 访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo

  5. jquery获取和失去焦点改变样式

    第一种:(文本框获取焦点后,它的颜色会有所变化,当失去焦点的时候,恢复为原来的样子) <html> <meta http-equiv="Content-Type" ...

  6. Flink资料(5) -- Job和调度

    该文档翻译自Jobs and Scheduling ----------------------------------------------- 该文档简单描述了Flink是如何调度Job的,以及如 ...

  7. linux文件名乱码解决办法

    1.linux解压压缩文件乱码 unzip -O CP936 xxx.zip 2.一般文件用convmv sudo convmv -f gbk -t utf-8 -r --notest /your_d ...

  8. javascript 动态创建表格

    <html> <head> <script> function createTable(rows,lines){ this.rows=rows; this.line ...

  9. [原创]obj-c编程16:键值编码(KVC)

    原文链接:obj-c编程16:键值编码(KVC) 我们可以借助obj-c中的键值编码(以后简称KVC,Key-Value Coding)来存取类的属性,通过指定所要访问的属性名字符串标示符,可以使用存 ...

  10. Java引用数据类型

    值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值.引用传递:也称为传地址.方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应 ...