#include <stdio.h>
int main()
{
int i = 0;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<=12; i++)
{
arr[i] = 0;
printf("hello\n");
}
return 0;
}
阅读上面这个代码,我们会认为这不就是简单的数组访问越界么。那么这段代码就应该会报错,接下来我用VS进行运行,看结果真是这样吗?
VS 32位
VS 64位
文章来源地址https://www.toymoban.com/news/detail-551592.html
由上面可知,这段代码在VS上不同位操作系统的结果是不一样的,并不都会报错。原因是这与地址在内存中是如何开辟的有关。
32位内存开辟是由高地址向低地址的,由于 int i = 0 先于 数组arr 创建,故变量i的地址是高于数组arr的地址的。又由于一个数组其内部又是从低地址到高地址存储的。故数组内越往后存储,其地址就越高。此代码的a[12]恰巧指向i的地址,使i又被变为0,因此一直死循环。
64位内存开辟都是低地址向高地址的,所以会发生数组越界。
下面是VS中调试查看内存的步骤,能熟练调试,对于一些代码问题是非常有帮助的。因此代码遇到问题不要慌,先调试看看。
文章来源:https://www.toymoban.com/news/detail-551592.html
到了这里,关于【C语言】-- 死循环了怎么办?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!