linux可以随意越界访问么?

发布于 2022-10-15 05:48:33 字数 407 浏览 34 评论 0

例如啊:
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

时光病人 2022-10-22 05:48:33

你这个程序是栈越界,越界一点不会出错。多了就完蛋了

裂开嘴轻声笑有多痛 2022-10-22 05:48:33

好好看书
都是基础知识
那些高手不会理这种问题的。

流星番茄 2022-10-22 05:48:33

你这个程序是栈越界,越界一点不会出错。多了就完蛋了
amarant 发表于 2011-05-29 08:40

    在linux下 栈越界被认为是安全的吗? 我发现有驱动也是这样写的 ,就像struct test a[0] 一样,不会修改相近的数据吗?

音栖息无 2022-10-22 05:48:33

C语言不检查数组越界的!

忆依然 2022-10-22 05:48:33

struct test a[0]
这只是占位符

帅哥哥的热头脑 2022-10-22 05:48:33

回复 5# kzl0629

    越界不一定不安全,要看后续使用有没有影响,如果越界的那块地方你始终用不到,或者不影响使用,就没问题。
说不定还有故意越界使用的呢

何处潇湘 2022-10-22 05:48:33

回复 5# kzl0629

    7楼正解  溢出是一种容易导致bug的行为。而且难以排查。

吻风 2022-10-22 05:48:33

回复  kzl0629

    越界不一定不安全,要看后续使用有没有影响,如果越界的那块地方你始终用不到,或 ...
flyfrogs 发表于 2011-05-29 10:03

    我这个疑问来自windows ,我刚才测试一下,在window下越界访问可能会发生越界中断( 弹出的提示:Access violation),但是有时还没有越界中断,我用的是win7,我不知道这是什么原理,当然这也不重要了,我有疑问的是在linux有什么机制保证这种机制(我指的是struct test a[0],这种占位符)是正确的,像8楼说的越界访问隐藏bug的,特别在内核中。

最终幸福 2022-10-22 05:48:33

回复  kzl0629

    7楼正解  溢出是一种容易导致bug的行为。而且难以排查。
amarant 发表于 2011-05-29 10:10

    斑竹啊,你到底同不同意7楼的啊,7楼说的是溢出是可以理解的,可以接受的?你到底是什么意思,弄的我很迷糊啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文