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 ];

扫描二维码关注公众号,回复: 2703957 查看本文章


          //当*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,明显是数组越界访问
 

猜你喜欢

转载自blog.csdn.net/Wmll1234567/article/details/81538227
今日推荐