C++Primer第三版练习题答案-----------------2.3和2.4

本文详细解析了C++中动态内存分配与释放的过程,通过具体示例代码展示了int类型变量及数组的动态创建与销毁,同时指出代码中存在的数组越界等潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

分析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,明显是数组越界访问
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值