重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章给大家分享的是有关C语言如何实现数组越界的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
新巴尔虎右ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
数组的下标是有范围限制的。
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,
二维数组的行和列也可能存在越界。
所以程序员写代码时,最好自己做越界的检查
#includeint 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("haha\n"); } return 0; }
让我们公布答案吧!
这段代码的bug是死循环
很抱歉满屏的haha吵到了你的眼睛(手动狗头)
是不是难以想象?请带着疑惑看看下文解释
有以下几个规则:
i和arr是局部变量
局部变量是放在栈区上的
栈区上内存的使用习惯是:先使用高地址处空间再使用地地址处空间
数组随着下标的增长,地址由低到高变化
示意图如下
“由低到高”和“由高到低”相遇了。
arr [12] = 0; 间接改变了i,相当于i = 0;
这样一来i又从0依次变大再回归0,实现了死循环的局面
至于空白格子代表的局部变量储存时相间隔的的字节个数是如何确定的, 这得看不同编译器了。vs编译器是空两格,其他编译器是什么样的,感兴趣可以自己探索哦。
感谢各位的阅读!关于“C语言如何实现数组越界”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!