数组遍历中奇怪的死循环
2018-11-02 本文已影响1人
伊凡vnir
/来源:本人微信公众号:豫见成电
我会连载推送一些关于C语言,网络空间安全,数学建模,算法方面的学习经历,还有一些成电生活,欢迎大家关注。/
数组越界会报错?在VC++默认debug版本下(因为release版本会进行代码优化),尝试下列代码,将i的上限不断增加,10,12,20,200,奇怪的事情发生了,在临界时会有报错出现。但是之后居然死循环了!
考虑内存布局的问题,是否是在某个a[i]赋值时候,内存与i内存一样导致将i重置,由此陷入死循环。
打开监视窗口查找i的地址
打开内存窗口,查看数组赋值过程。
发现果然如此,在数组a[12]时地址与i地址相同,将i重置为0,导致死循环。
所以代码中有时有一些很隐蔽的错误,但是可以导致整个代码飞掉,于是需要理解底层内存模式的一些知识,才能在出问题时得以快速的找到解决方法。在这个问题上,显然是由于堆栈内存理解的问题,数组内存分配是低地址到高地址分配,栈上空间分配是高地址到低地址,所以数组检索内存超出时肯定会影响其他变量等的值,导致一些奇奇怪怪的bug出现。