‘壹’ 以下的C程序代码为什么会出现死循环错在哪里希望高手指点。
第一个循环,i=N的时候数组越界了。数组范围只能是a[0][0]~a[9][9]。
死循环,应该说很多编译器对于这个代码都会生成产生死循环的代码。因为i的声明虽然在a[N][N]之前,但赋值是在其后。因此i在内存上的实际位置,会变为a[N][N]之后的第一个位置,所以楼主的代码执行到a[10][1] = 1 时,正好将i重新初始化为1了
‘贰’ 什么是死循环
在编程中,一个靠自身控制无法终止的程序称为“死循环”。
例如在C语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。
在设计程序时,若遇到死循环,可以通过按下Ctrl+Pause/Break的方法,结束死循环。然而,在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。
(2)死循环会在编译的时候出错吗扩展阅读
死循环的产生原因:
死循环也可能因为多个模块之间的交互而产生。考虑一台服务器若收到无法理解的需求时,会回应错误信息,此架构中不会有死循环。
但若有二台上述的服务器(A和B),互相交换数据,A收到由B所提交无法理解的需求,会回应错误信息给B,但若B也无法理解A提交的需求(其实是A的错误信息),会再以自己的格式回应错误信息给,A收到后无法理解,会再回应错误信息给B。像邮件循环就是这类的例子。