• <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;
            }
            国内精品久久久久久久久电影网| A级毛片无码久久精品免费| 久久精品亚洲精品国产欧美| 久久久久亚洲AV无码专区桃色| 亚洲精品久久久www| 亚洲愉拍99热成人精品热久久| 国内精品久久久久影院日本| 99久久99久久精品国产片| 亚洲国产精品综合久久一线| 精品久久久久久综合日本| 色8激情欧美成人久久综合电| 色欲综合久久中文字幕网| 久久综合久久久| 午夜精品久久久久久久| 久久久久久久久久久免费精品| 亚洲精品国精品久久99热一| 久久国产精品免费一区二区三区| 久久亚洲精品中文字幕| 日日狠狠久久偷偷色综合0| 久久国产精品-久久精品| 国内精品久久久久影院薰衣草| 国产成人99久久亚洲综合精品| 亚洲αv久久久噜噜噜噜噜| 色综合久久天天综线观看| 久久免费精品一区二区| 久久99亚洲网美利坚合众国| 一日本道伊人久久综合影| 久久国产精品国语对白| 国产激情久久久久影院小草 | 精品综合久久久久久97超人 | 久久经典免费视频| 欧美午夜A∨大片久久| 久久精品国产亚洲Aⅴ香蕉| 久久免费高清视频| 亚洲国产精久久久久久久| 久久亚洲国产欧洲精品一| 色噜噜狠狠先锋影音久久| 51久久夜色精品国产| 久久99精品国产麻豆不卡| 久久午夜福利电影| 国产精品久久久久久久app |