您的位置:首页 > 编程语言 > C语言/C++

C++ Primer 第三版 练习2.4解答

2010-05-12 11:17 155 查看
下面的代码段是做什么的有什么严重错误?(注意指针pia 的下标操作符的用法是正确的在3.9.2 节中我们会解释其理由。)
int *pi = new int( 10 );
int *pia = new int[ 10 ];
while ( *pi < 10 ) {
pia[ *pi ] = *pi;
*pi = *pi + 1;
}
delete pi;
delete [] pia;

我来解释一下每行的代码语义:
//动态分配一个int大小的内存空间,其内容初始化为10将其地址存放到pi中
int *pi = new int( 10 );

/动态分配一个能容纳10个int的内存空间,未作初始化操作。
int *pia = new int[ 10 ];

//当*pi(也就是10)小于10的时候,执行循环语句
while ( *pi < 10 ) {

 

//pia[ 10 ] 赋值为10将其开始地址存放到pia中 

pia[ *pi ] = *pi;

 //*pi的内容累加1
*pi = *pi + 1;
}

//释放pi指向的整数内存
delete pi;

//释放pia指向的整数数组内存
delete [] pia;

问题:
1)循环语句条件判断为False,所以循环体中的语句根本不执行。
2) pia[]的index没有经过边界检测,在上例中,pia[]从0~9一共10个int元素,但是*pi的值为10,明显是数组越界访问
3)pia[]中的内容未作初始化处理,里面包含垃圾数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ delete