zoukankan      html  css  js  c++  java
  • C++学习之指针的常见错误

    C++学习之指针的常见错误
          我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程序中,并且它仍然会指向原来的内存空间。这时候如果你忘记了这点而再次尝试使用这个指针的时候,那么将会导致程序出错。
            这种错误非常难于调试,因为这种值得改变不太容易使人联想到时被删除的安格指针导致的错误,因此在删除一个指针以后,我们一定要将它赋值为空,虽然使用空指针的时候是违法的,容易使程序崩溃,但是,有时候我们宁愿让程序崩溃也不愿意调试这种难于觉察的错误。
            这种隐藏的错误可以从下面这个例子中体现出来:
            #include<iostream>
            using namespace std;
            int main()
            {
                    int *p=new int;
                    *p=4;
                    cout<<"将4赋给p的地址以后,指针p读取的值: "<<*p<<endl;
                    delete p;
                    cout<<"删除P指向的空间以后,指针p读取的值为: "<<*p<<endl;
                    long *p1=new long;
                    cout<<'创建新空间以后,指针p1中保存的地址: "<<p1<<endl;
                   *p1=12423;
                    cout<<"指向新空间以后,指针P1中保存的地址为:"<<p1<<endl;
                    *p=23;
                    cout<<"将23赋给p的地址以后,指针p读取的值: "<<*p<<endl;
                    cout<<"将23赋给p的地址以后,指针p1读取的值: "<<*p1<<endl;
                    delete p1;
                    return 0;
             }
              运行这个程序,会发现指针p和p1读取的值都为23,由于编译器会默认将释放掉的内存空间回收然后分派给新开辟的空间,因此的10行新定义了指向新开辟的long型变量空间的指针p1以后,这个p1指针指向的空间实际上就是被释放的空间,也就是P原来指向的空间,这种错误非常之难调试,因为这种值的改变不容易令人联想到的是被删除的那个指针导致的错误,因此在删除一个指针以后,一定要将其赋值为空,虽然使用空指针是违法的,容易使程序奔崩溃,但是我们宁愿程序崩溃,也不愿意它调试起来很困难。
  • 相关阅读:
    指针常量,常指针,指向常量的常指针(从我大一写的QQ空间迁移过来)
    关于负数的除法和余数的结果
    我爱Java系列---【案例:使用session存储验证码完成登录功能】
    我爱Java系列---【Java生成验证码案例】
    我爱Java系列---【Tomcat介绍及配置教程(附tomcat8.5.34下载文件,解压即可用)】
    我爱Java系列---【HTML基本标签】
    我爱Java系列---【原生JDBC】
    我爱Java系列---【mysql多表查询】
    我爱Java系列---【mysql查询DQL&多表关系】
    我爱Java系列---【mysql基础&约束】
  • 原文地址:https://www.cnblogs.com/sunfie/p/4394586.html
Copyright © 2011-2022 走看看