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[]中的内容未作初始化处理,里面包含垃圾数据。
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++ primer 练习 2.3、2.4
- C++ Primer 第五版 练习9.52 解答
- C++ Primer 中文版 5th Edition 练习15.8和练习15.9的解答
- [偏微分方程教程习题参考解答]2.4完全非线性偏微分方程
- 《Android编程权威指南(第三版)》第八章挑战练习Demo
- C++ primer 第五版 中文版 练习 12.6 个人code
- C++ Primer 第五版 中文版 练习 13.22 个人code
- Accelerated C++:通过示例进行编程实践——练习解答(第3章)
- 《C++ Primer》第五版课后习题解答_第一章(1)(01-11)
- 《C++ Primer》第五版课后习题解答_第三章(1)(01-05)
- C++ primer(第五版) 练习 6.33
- C++ Primer 第五版 中文版 练习 13.44 个人code
- 《C++ Primer》第五版课后习题解答_第三章(5)(37-45)
- [詹兴致矩阵论习题参考解答]习题2.4
- Accelerated C++:通过示例进行编程实践——练习解答(第12章)
- c++ Primer课后练习9-31
- C++ primer 习题练习:8.3~8.4
- C++primer 11.3.6节练习解答
- C++ primer 习题练习:9.13
- C++ Primer(第五版)练习4.21