linux可以随意越界访问么?
例如啊:
struct test
{
int a;
int b;
};
int main()
{
struct test a[10];
a.[20].b = 10;
printf("%d\n",a[20].b);
return 0;
}
这段代码是正确的,运行时居然还对了,很少不理解啊?求高手解释
我还发现一个内核有这么定义的
struct test a[0];
这个定义的意图是什么啊?再次求解释
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
你这个程序是栈越界,越界一点不会出错。多了就完蛋了
好好看书
都是基础知识
那些高手不会理这种问题的。
在linux下 栈越界被认为是安全的吗? 我发现有驱动也是这样写的 ,就像struct test a[0] 一样,不会修改相近的数据吗?
C语言不检查数组越界的!
struct test a[0]
这只是占位符
回复 5# kzl0629
越界不一定不安全,要看后续使用有没有影响,如果越界的那块地方你始终用不到,或者不影响使用,就没问题。
说不定还有故意越界使用的呢
回复 5# kzl0629
7楼正解 溢出是一种容易导致bug的行为。而且难以排查。
我这个疑问来自windows ,我刚才测试一下,在window下越界访问可能会发生越界中断( 弹出的提示:Access violation),但是有时还没有越界中断,我用的是win7,我不知道这是什么原理,当然这也不重要了,我有疑问的是在linux有什么机制保证这种机制(我指的是struct test a[0],这种占位符)是正确的,像8楼说的越界访问隐藏bug的,特别在内核中。
斑竹啊,你到底同不同意7楼的啊,7楼说的是溢出是可以理解的,可以接受的?你到底是什么意思,弄的我很迷糊啊