一个死循环

gyyggyy 2003-08-29 08:01:45
#include "stdio.h"
void main()
{
int *p,a[10],i;
p=&i;
for (i=0;i<=10;i++)
{
a[i]=0;
printf("%d ",a[i]);
}
}
如果把p=&i;这句删除,该程序就不是死循环了。不删除这句就是死循环,不知是为什么。(我本意就是想些个死循环)。
...全文
104 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hangdian 2003-09-14
  • 打赏
  • 举报
回复
我这是什么,我用的VC++6.0没什么问题
ggg82 2003-09-14
  • 打赏
  • 举报
回复
越界错
playboyxp 2003-09-14
  • 打赏
  • 举报
回复
#include "stdio.h"
void main()
{
int *p,a[10],i;
p=&i;
for (i=0;i<=9;i++)
{
a[i]=0;
printf("%d ",a[i]);
}
}
l1ul1u 2003-09-14
  • 打赏
  • 举报
回复
这和编译器有关
金笛子 2003-09-14
  • 打赏
  • 举报
回复
更正一点:计算机不判断数组越界是不对的我的原意是说:c和c++不判断数组越界
学糊涂了还是听听大家的建议吧
金笛子 2003-08-30
  • 打赏
  • 举报
回复
看了大家的高见,我想到一个问题。计算机它是不判断数组越界,这需要编程者自行注意。不知是否是这样的。楼主的愿望是想写个是循环,而在不同的编译器上去有不同的显示。我想这还不是楼主真正想要的吧。我觉得应该写一个在任何编译器上都能够构成死循环的这实质上就是软件开发的一个开发思想--软件的可移植性。这是我个人的观点还是听听大家的建议吧
chanet 2003-08-30
  • 打赏
  • 举报
回复


:( ... 什么工具??
ringphone 2003-08-29
  • 打赏
  • 举报
回复
多一句或少一句无关紧要的语句会造成程序崩溃或本该崩溃却继续存活往往发生在有内存操作错误的代码附近,我发现好几次明明该造成程序崩溃的地方,比如数组越界等,在之后或函数返回处加个MessageBox能延缓程序的崩溃甚至不崩溃。可能是你加的代码,分配的内存正好接续到数组尾部,越界到加入的内存,因此能暂时没事。
bluedustqq 2003-08-29
  • 打赏
  • 举报
回复
数组越界之后软件就失去了原来的辨识功能,多一句与少一句已经不能用编程思想解释~~~
oopig 2003-08-29
  • 打赏
  • 举报
回复
你debug看看那些变量的内存布局就知道了
gyyggyy 2003-08-29
  • 打赏
  • 举报
回复
谢谢各位,我用的是TC2。0
我就是要他数组越界造成死循环,照道理,i的地址应该是a[10]的地址,所以有没有p=&i;这句都应该是没有关系的,可是为什么有了这句就会死循环,而没有这句就不会发生死循环啊?
BAYERN 2003-08-29
  • 打赏
  • 举报
回复
俺用devc++运行,没有出现死循环,连报警都没有,将i<=17时运行时会产生错误。
8712224 2003-08-29
  • 打赏
  • 举报
回复
我觉得fengfeng2003说的很对啊。数组越界。不过我还没去在TC下运行,去是是就知道了
Jinhao 2003-08-29
  • 打赏
  • 举报
回复
Dev-C++编译后也没有问题,你是用的tc吗?
oopig 2003-08-29
  • 打赏
  • 举报
回复
在vc6中,int *p,a[10],i;这几个变量的内存地址是从大到小的连续空间。
所以a[10] = 0这个语句改变的是p的值,即把p置空。
但是从楼主描述的现象看,应该是a[10] = 0把i置空了。
所以我怀疑p=&i;这个语句影响了编译器对局部变量的空间部署,但是vc6没有这种情况。
所以问问楼主用的什么编译器。楼主自己debug看看内存布局也就知道了。

fengfeng2003 2003-08-29
  • 打赏
  • 举报
回复
vc6.0下运行,没有出现死循环
不过i<=10错了
因为数组有10个元素,从0到9,没有a[10]
oopig 2003-08-29
  • 打赏
  • 举报
回复
看错了。
你用的什么编译器?vc6我试了没有这个问题。
chengroad 2003-08-29
  • 打赏
  • 举报
回复
楼上说得有道理,可这与楼主说得删除p=&i;这句有什么关系呢。照楼主说得即使改了,是不是还有问题?
oopig 2003-08-29
  • 打赏
  • 举报
回复
>>for (i=0;i<=10;i++)
应该是for (i = 0; i < 10; i++)这样就可以了。
你给a[10]赋值的时候,内存越界了,实际上修改了i的值。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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