请教:关于C++ Primer 第三版中的一个习题

ribut9225 2008-10-17 11:58:30
C++ Primer 第三版中的一个习题,练习2.4(P23)

题目如下:

下面的代码是做什么的,有什么严重的错误?


int *pi = new int(10);
int *pia = new int[10];

while(*pi < 10)
{
pia[*pi] = *pi;
*pi = *pi + 1;
}
delete pi;
delete[] pia ;



偶只知道,应该是没进入循环吧

其他有什么严重的错误?请各位指点一下
...全文
146 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovedelki 2008-10-17
  • 打赏
  • 举报
回复
如果进去:

pia[*pi] = *pi; 下表会越界。
ribut9225 2008-10-17
  • 打赏
  • 举报
回复
谢谢各位
arthurlee 2008-10-17
  • 打赏
  • 举报
回复
问题就是这段代码的目的是对pia数组进行初始化,但是循环被忽略过去了。
改成这样就行了,没有数组越界的问题,不过需要注意,循环条件需要判断一下负数的情况。


int *pi = new int(0);
int *pia = new int[10];

while(*pi >= 0 && *pi < 10)
{
pia[*pi] = *pi;
*pi = *pi + 1;
}
delete pi;
delete[] pia ;

chenzhp 2008-10-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ribut9225 的回复:]
楼上的各位,习题是要求找到严重的错误,偶就是找不到啊
[/Quote]

没有严重错误。就是不执行循环而已。翻看习题解答也是如此
mazuhui 2008-10-17
  • 打赏
  • 举报
回复
第一我觉得while 后面的条件不符合 loop不会执行,
如果执行的话,数组下标会越界

谁有答案啊,答案怎么说的啊
谢谢
mmidd 2008-10-17
  • 打赏
  • 举报
回复
下标越界
ribut9225 2008-10-17
  • 打赏
  • 举报
回复
楼上的各位,习题是要求找到严重的错误,偶就是找不到啊
chenzhp 2008-10-17
  • 打赏
  • 举报
回复
问题在于循环体不会执行,因为(*pi)不会小于10. 所以这段代码没有意义
其他释放内存的操作是对的。
wwwypy 2008-10-17
  • 打赏
  • 举报
回复
好像没有啊!*pi的值好像是10啊
帅得不敢出门 2008-10-17
  • 打赏
  • 举报
回复
貌似代码无意义 除了浪费空间啥也没做
其目的是用*pi初始化数组

int *pi = new int(10);
int *pia = new int[10];
int i=0;
while(i < 10)
{
pia[i] = *pi;
i++;
}
delete pi;
delete[] pia ;
初学者一枚 2008-10-17
  • 打赏
  • 举报
回复
进不去了循环,但是如果进去,数组范围就超了~~
  • 打赏
  • 举报
回复
感觉程序没有问题。至于数组这样来释放堆内存是不是合适就值得再商榷了!delete pi;

如果*(pi+i)小于10的话,把*(pi+i)置为i。i在这里就为*pi
taodm 2008-10-17
  • 打赏
  • 举报
回复
先去看配套的《习题解答》。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧