数据结构和算法分析数学建模艺术算法艺术

数组遍历中奇怪的死循环

2018-11-02  本文已影响1人  伊凡vnir

/来源:本人微信公众号:豫见成电
我会连载推送一些关于C语言,网络空间安全,数学建模,算法方面的学习经历,还有一些成电生活,欢迎大家关注。
/

数组越界会报错?在VC++默认debug版本下(因为release版本会进行代码优化),尝试下列代码,将i的上限不断增加,10,12,20,200,奇怪的事情发生了,在临界时会有报错出现。但是之后居然死循环了!

image

考虑内存布局的问题,是否是在某个a[i]赋值时候,内存与i内存一样导致将i重置,由此陷入死循环。

打开监视窗口查找i的地址

image

打开内存窗口,查看数组赋值过程。

image

发现果然如此,在数组a[12]时地址与i地址相同,将i重置为0,导致死循环。

所以代码中有时有一些很隐蔽的错误,但是可以导致整个代码飞掉,于是需要理解底层内存模式的一些知识,才能在出问题时得以快速的找到解决方法。在这个问题上,显然是由于堆栈内存理解的问题,数组内存分配是低地址到高地址分配,栈上空间分配是高地址到低地址,所以数组检索内存超出时肯定会影响其他变量等的值,导致一些奇奇怪怪的bug出现。

上一篇 下一篇

猜你喜欢

热点阅读