关于linux越界访问的问题,很不理解

发布于 2022-10-15 05:48:37 字数 407 浏览 26 评论 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:37

可运行不代表正确。

零长数组,取址方便。

晒暮凉 2022-10-22 05:48:37

本帖最后由 Horizon2012 于 2011-05-29 16:41 编辑

a[10]分配在栈中,栈由高往低生长,而a[20].b=10 这样做已经侵犯了已分配栈的较高地址空间

百合的盛世恋 2022-10-22 05:48:37

不管是往上走还是往下走,只要在一页之内,硬件不会产生异常,OS也就不会管你。这必需由硬件本例,不然,每一次访问内存还去先检查地址是不是正确的。

入怼 2022-10-22 05:48:37

同意三楼

草莓酥 2022-10-22 05:48:37

能运行并不代表正确,合理

回忆那么伤 2022-10-22 05:48:37

就是

友欢 2022-10-22 05:48:37

linux分配内存有一个padding的,你虽然访问了数组外的内存,但这个内存还在这一页的padding内,不会越界

最美的太阳 2022-10-22 05:48:37

0长数组还是很有玄机的~~

余罪 2022-10-22 05:48:37

太深奥了!学习中!

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