东南教育网您的位置:首页 >资讯 > 新知 >

数组越界(数组越界)

导读 大家好,小鑫来为大家解答以上的问题。数组越界,数组越界这个很多人还不知道,现在让我们一起来看看吧!1、任何的变量只是内存的一种表示而

大家好,小鑫来为大家解答以上的问题。数组越界,数组越界这个很多人还不知道,现在让我们一起来看看吧!

1、任何的变量只是内存的一种表示而已,你定义了数组int a[2]表示你申请了4字节连续的内存空间,a就代表其首地址,这片内存不会被别的程序使用,只有你的程序会使用它存取数据;a[4〕虽然没有定义,但是这个内存空间是存在的,就是a+4,这片空间可能是被别的程序使用了,也可能是闲置着的,你不一定无权访问,但是你如果访问了很有可能会得不到你想要的结果,甚至会影响系统的运行,很有危险的!!是啊!!语法错误不等于不能执行,能执行不等于结果正确....结论:越界是肯定的内存是很大的举个例子吧:int main(...){int a =0;int b[3] = 0;b[3] = 1;}//结果有可能使a=1;//具体结果跟进程中栈排列有关越界虽然会影响其它内存位置的变量,但只能影响本进程空间的内存,对其他程序没有影响,除非你的越界已经延伸到了环境变量的位置unix/linux下可能的错误(其他的不知道):SIGBUS 总线错误SIGSEGV 段地址错误当然有越界了,但是C语言标准规定访问比数组大小大1的地址是合法的,有的实现甚至允许访问更多的地址,但错误就像楼上所说的那样定义的a[2];只有两个数组元素,所以只能访问a[0]和a[1]而后面访问a[4],是非法的。

2、有越界,不一定表现出来,未知错误,会修改其他地方内存很危险。

本文到此分享完毕,希望对大家有所帮助。

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。