关于一段c++代码

软件和网站开发以及相关技术探讨
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

关于一段c++代码

#1

帖子 banban » 2009-09-05 13:43

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

看不出哪里有错,请大家指教
PS:新学程序语言不久,请大家见谅,呵呵
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: 关于一段c++代码

#2

帖子 懒蜗牛Gentoo » 2009-09-05 13:58

那他到底哪错了呢?编译错误还是执行出来的结果不对?报什么错啊?
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

Re: 关于一段c++代码

#3

帖子 banban » 2009-09-05 14:13

懒蜗牛Gentoo 写了:那他到底哪错了呢?编译错误还是执行出来的结果不对?报什么错啊?
不是啦,是书上的一个练习题哦,题目这样“下面的代码段是做什么的,有什么严重错误?”。等等我编译看看。。。
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

Re: 关于一段c++代码

#4

帖子 banban » 2009-09-05 14:29

哦,很奇怪啊,刚才编译的时候没有出现问题,也可以执行。。。
所以,更不知道这个问题是什么咯
头像
soething
帖子: 746
注册时间: 2008-07-23 19:06

Re: 关于一段c++代码

#5

帖子 soething » 2009-09-05 14:34

脑残题目。
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

Re: 关于一段c++代码

#6

帖子 banban » 2009-09-05 14:39

soething 写了:脑残题目。
。。。。。。。
我是新学程序语言不久,要是有人觉得我问的问题过于简单,可以不要来回答。谢谢
头像
comfanter
帖子: 190
注册时间: 2009-05-02 14:51

Re: 关于一段c++代码

#7

帖子 comfanter » 2009-09-05 15:02

根本就没进入循环 :em20
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: 关于一段c++代码

#8

帖子 懒蜗牛Gentoo » 2009-09-05 15:19

恩,对,根本没循环……
int *pi = new int( 10 );
这句之后,*pi就等于10了,从来也没小于过10啊
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
月光林地的猫
帖子: 37
注册时间: 2009-06-27 23:33

Re: 关于一段c++代码

#9

帖子 月光林地的猫 » 2009-09-05 19:51

*pi初始化成10,
*pi<10为假,循环都不用进,直接就开始两条delete语句。程序当然能通过编译而且很顺畅的执行。
估计题目本意是循环体里面的数组下标超界问题吧。
真不知道是那本书里的。
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

Re: 关于一段c++代码

#10

帖子 banban » 2009-09-05 21:12

月光林地的猫 写了:*pi初始化成10,
*pi<10为假,循环都不用进,直接就开始两条delete语句。程序当然能通过编译而且很顺畅的执行。
估计题目本意是循环体里面的数组下标超界问题吧。
真不知道是那本书里的。
是的,我也知道没有进入循环的。是C++ Primer里面的练习题。
多谢指教
头像
xuyu16
帖子: 37
注册时间: 2008-11-05 14:59

Re: 关于一段c++代码

#11

帖子 xuyu16 » 2009-09-06 14:20

越界记大过!!!
....................................
善用联系的观点看问题,
这就是哲学
...................................
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

Re: 关于一段c++代码

#12

帖子 banban » 2009-09-07 20:07

xuyu16 写了:越界记大过!!!
怎么越界呢?还请指点一二哦。。。
月光林地的猫
帖子: 37
注册时间: 2009-06-27 23:33

Re: 关于一段c++代码

#13

帖子 月光林地的猫 » 2009-09-08 16:06

pia指向一个10个元素的整形数组int[10]
pi被初始化为10
那么pia[*pa]就是pia[10],
10个元素的数组,下标是从0-9的,pia[10]当然越界了。
后面又把(*pi)++了,越界的更严重。
这个程序如果执行了循环体内的语句,轻则段错误,然后直接终止;严重的话,你得按机箱上某个大大的按钮了。
上次由 月光林地的猫 在 2009-09-08 17:41,总共编辑 3 次。
头像
xuyu16
帖子: 37
注册时间: 2008-11-05 14:59

Re: 关于一段c++代码

#14

帖子 xuyu16 » 2009-09-08 17:18

这个题目的用意就是让你知道越界是不好的,但是有不能真的越界造成潜在的崩溃。于是,就不让进循环,只是让你看看,打预防针而已。 :em09
....................................
善用联系的观点看问题,
这就是哲学
...................................
头像
banban
帖子: 3340
注册时间: 2008-03-23 17:01

Re: 关于一段c++代码

#15

帖子 banban » 2009-09-08 18:18

月光林地的猫 写了:pia指向一个10个元素的整形数组int[10]
pi被初始化为10
那么pia[*pa]就是pia[10],
10个元素的数组,下标是从0-9的,pia[10]当然越界了。
后面又把(*pi)++了,越界的更严重。
这个程序如果执行了循环体内的语句,轻则段错误,然后直接终止;严重的话,你得按机箱上某个大大的按钮了。
哦,我明白了,所以题目才没有让进入循环,只是单纯为了表达越界的错误,对吗,呵呵
多谢咯
回复