C++Primer第三版練習題答案-----------------2.3和2.4

 

分析a定義了一個int型變量,並賦予了初值1024,內存分配屬於靜態分配

           b定義了一個名叫pi的int型指針,靜態開闢了一個空間,pi存放的是整形變量ival的地址

           c用new分配了一個int型的對象,並給他賦初值爲1024,pi2存放的是其存放1024的地址

           d用new分配了一個int型的數組,數組元素個數有1024個,記住,pi3存放的是數組第一個元素的內存地址

分析:代碼解釋

           /動態分配一個int型大小的內存空間,其內容初始化爲10(即*p的內容爲10),並將其地址存放到pi中

            int *pi = new int( 10 );


          /動態分配一個能容納10個int的內存空間,未作初始化操作。
           int *pia = new int[ 10 ];


          //當*pi(也就是10)小於10的時候,執行循環語句,但是*pi此時爲10,故while循環條件爲假,不執行while裏的代碼
           while ( *pi < 10 ) 

 

           //pia[ 10 ] 賦值爲10將其開始地址存放到pia中 

            pia[ *pi ] = *pi;


          //*pi的內容累加1
           *pi = *pi + 1;


          //釋放pi指向的整數內存
            delete pi;


          //釋放pia指向的整數數組內存
           delete [] pia;

解析本段代碼的目的是想要將pia數組進行初始化


問題:
1)循環語句條件判斷爲False,所以循環體中的語句根本不執行。
2) pia[]的index沒有經過邊界檢測,在上例中,pia[]從0~9一共10個int元素,但是*pi的值爲10,明顯是數組越界訪問
 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章