当前位置:  开发笔记 > 编程语言 > 正文

索引数组时会出现无限循环

如何解决《索引数组时会出现无限循环》经验,为你挑选了2个好方法。

C中的数组索引是基于0的.因此,如果您的数组大小为5,则索引从0到4.

循环for (i = 0; i <= 5; i++)到达索引5,它超出了数组的范围.

超出缓冲区边界是C中未定义的行为.允许任何事情发生.而你的程序完全失败,是一个可能的结果.

可能正在发生,因为数组和索引在内存中彼此相邻.所以vals[5] = 0设置i为零.从此以后,循环条件永远得到满足.



1> StoryTeller ..:

C中的数组索引是基于0的.因此,如果您的数组大小为5,则索引从0到4.

循环for (i = 0; i <= 5; i++)到达索引5,它超出了数组的范围.

超出缓冲区边界是C中未定义的行为.允许任何事情发生.而你的程序完全失败,是一个可能的结果.

可能正在发生,因为数组和索引在内存中彼此相邻.所以vals[5] = 0设置i为零.从此以后,循环条件永远得到满足.



2> Gerhardh..:

此代码调用未定义的行为.这当然意味着他们所说的,实际上可能发生.但这很大程度上取决于许多细节.

当他们声明i将被重置时,他们会假设堆栈上的变量的某个位置.一旦你执行

vals[i] = 0;

i==5可以实际写入到该位置i被存储.但另一方面,i可能只是保存在寄存器或堆栈中的其他位置,您将无法获得无限循环.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有