• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

             

            /*什么叫空懸指針:指針?biāo)赶虻拇鎯?chǔ)區(qū)的生存期以及結(jié)束,但是指針的生存期還沒有結(jié)束,導(dǎo)致
            存儲(chǔ)區(qū)的數(shù)據(jù)已經(jīng)被釋放,指針?biāo)傅膮^(qū)域是個(gè)隨機(jī)值的這種錯(cuò)誤。那么這個(gè)指針就叫空懸指針。
            出現(xiàn)空懸指針的兩種常見情況:
            1.函數(shù)返回一個(gè)自動(dòng)型局部變量的地址,我以前就經(jīng)常出現(xiàn)這種情況
            2.刪除一個(gè)動(dòng)態(tài)分配的對(duì)象以后,沒有將指針指0,后面使用到這個(gè)指針的時(shí)候其實(shí)已經(jīng)指向一個(gè)
            隨機(jī)值。
            對(duì)2的一點(diǎn)補(bǔ)充,注意動(dòng)態(tài)分配的時(shí)候,指針的生存期跟指針?biāo)竻^(qū)域的生存期是兩個(gè)不同的概念。
            指針的生存期從程序開始運(yùn)行開始,結(jié)束于程序結(jié)束運(yùn)行,指針本身的存儲(chǔ)區(qū)間是編譯的時(shí)候就
            確定的,指針?biāo)傅膭?dòng)態(tài)分配的區(qū)間的生存期從new開始,到delete結(jié)束,所以如果調(diào)用delete后
            沒有把指針指0就出現(xiàn)了空懸指針,此時(shí)很容易犯錯(cuò)誤。

            解決空懸指針的方法:1.對(duì)應(yīng)情況1,函數(shù)返回一個(gè)靜態(tài)局部變量
            2.對(duì)應(yīng)情況2,調(diào)用delete以后,將指針指空。
            */
            #include
            <iostream>
            using namespace std;
            int * add1(const int & a,const int &b)
            {
                
            int c=a+b;
                cout
            <<"在函數(shù)add1的內(nèi)部結(jié)果為"<<c<<endl;
                
            return &c;
            }
            //哈哈,在編譯這個(gè)函數(shù)的時(shí)候vc6.0給出了下面的警告:
            //warning C4172: returning address of local variable or temporary


            int * add2(const int &a,const int & b)
            {
                
            static int c=a+b;
                cout
            <<"在函數(shù)add2的內(nèi)部結(jié)果為"<<c<<endl;
                
            return &c;
            }

            int * add3(const int &a,const int &b)
            {
                
            int *p=new int;
                
            *p=a+b;
                cout
            <<"在函數(shù)add3的內(nèi)部結(jié)果為"<<*p<<endl; 
                
            return p;
            }

            void main()
            {
                
            int a=1,b=2,*p;
                cout
            <<"調(diào)用add1返回一個(gè)空懸指針\n";
                p
            =add1(a,b);
                cout
            <<"指針?biāo)傅闹禐?/span>"<<*p<<endl;
                cout
            <<"指針?biāo)傅闹蛋l(fā)生改變 了嗎?\n"<<(*p==3?"沒有改變":"改變")<<endl;
                cout
            <<"調(diào)用add2可以避免返回一個(gè)空懸指針 "<<endl;
                p
            =add2(a,b);
                cout
            <<"指針?biāo)傅闹禐?/span>"<<*p<<endl;
                cout
            <<"指針?biāo)傅闹蛋l(fā)生改變 了嗎?\n"<<(*p==3?"沒有改變":"改變")<<endl;
                cout
            <<"調(diào)用add3可以避免返回一個(gè)空懸指針 "<<endl;
                p
            =add3(a,b);
                cout
            <<"指針?biāo)傅闹禐?/span>"<<*p<<endl;
                cout
            <<"指針?biāo)傅闹蛋l(fā)生改變 了嗎?\n"<<(*p==3?"沒有改變":"改變")<<endl;
                delete p;
                p
            =0;
            }
            亚洲人AV永久一区二区三区久久| 国内精品久久久久久麻豆| 2020国产成人久久精品| 一本久久久久久久| 色婷婷狠狠久久综合五月| 色婷婷久久综合中文久久蜜桃av| 国产精品嫩草影院久久| 久久精品国产亚洲麻豆| 亚洲国产精品久久久久| 久久精品亚洲一区二区三区浴池| 久久综合亚洲色HEZYO社区| 亚洲午夜久久久久久久久久| 色偷偷88888欧美精品久久久| 久久久久久精品成人免费图片| 久久人人爽人人爽人人AV| 国产精品久久久久…| 91精品国产91热久久久久福利| 精品熟女少妇aⅴ免费久久| 亚洲日本va午夜中文字幕久久 | 久久99精品久久久久久噜噜| 亚洲一区中文字幕久久| 国产成人香蕉久久久久| 久久人人超碰精品CAOPOREN| 国产精品99久久久精品无码| 国产精品一区二区久久精品无码| 久久精品aⅴ无码中文字字幕不卡| 99久久精品国产综合一区| 久久精品国产99国产精品| 久久96国产精品久久久| 精品国产一区二区三区久久| 岛国搬运www久久| 久久福利青草精品资源站免费 | 欧美日韩精品久久免费| 国产精品美女久久久久| 久久精品国产久精国产果冻传媒| 国产精品99久久久久久宅男 | 国产亚洲美女精品久久久2020| 99久久777色| 久久久久免费精品国产| 色偷偷88888欧美精品久久久| 久久综合给合综合久久|