• 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原来指向的空间,这种错误非常之难调试,因为这种值的改变不容易令人联想到的是被删除的那个指针导致的错误,因此在删除一个指针以后,一定要将其赋值为空,虽然使用空指针是违法的,容易使程序奔崩溃,但是我们宁愿程序崩溃,也不愿意它调试起来很困难。
  • 相关阅读:
    如何将英文PDF文献翻译成中文
    基于颜色的R2V软件快速矢量化
    ArcGIS下如何提取研究区域
    ArcGIS 如何设置地图显示范围大小
    基于GIS的空间分析功能分析芝加哥小熊队和白袜队的球迷范围
    C#中的字段,常量,属性与方法
    ArcGIS中的连接和关联表
    使用docker搭建Samba共享目录
    Docker国内镜像源的切换
    pl/sql中的取模运算
  • 原文地址:https://www.cnblogs.com/sunfie/p/4394586.html
Copyright © 2020-2023  润新知