【问题标题】:Out of Array size element values [duplicate]超出数组大小的元素值[重复]
【发布时间】:2017-06-06 11:13:31
【问题描述】:

How dangerous is it to access an array out of bounds?这并不能说明存储的值是什么。

当我尝试打印程序中显示的超出数组大小的元素时,它正在打印0。会一直是0 还是一些垃圾值。

计划

#include<stdio.h>
int main()
{
    int a[5] = {10};
    printf("\n\ra[6] = %d",a[6]);
    printf("\n\ra[7] = %d",a[7]);
    printf("\n\ra[8] = %d",a[8]);
    printf("\n\ra[9] = %d",a[9]);
    return 0;
}

输出

a[6] = 0 a[7] = 0 a[8] = 0 a[9] = 0

我的问题是超出数组大小的元素的值是多少?它总是垃圾值还是零?

【问题讨论】:

  • 它是 undefined,你的无效访问可能会发生任何事情。
  • @Stargateur 不一样,我在问价值是什么
  • 你知道undefined是什么意思吗?
  • @EmbeddedC 这真的很接近,请阅读线程的答案你会发现你问什么。
  • "[将] 它总是 [打印] 垃圾值还是零?" - 不,它可能会终止你的程序,让恶魔从你的鼻子里飞出来,并杀死你的长子。未定义行为是未定义

标签: c arrays memory undefined-behavior


【解决方案1】:

当我尝试打印超出数组大小的元素时......

等等,停下!!任何超过4 的值对于i(索引)[C 数组使用0-based indexing]像int a[5] = {10}; 这样定义的数组是无效的内存访问,导致undefined behavior。你根本不能指望任何事情

  • 如果幸运的话,您可能会在运行程序时收到分段错误,这强烈表明某种无效的内存访问。

  • 如果您不走运,该程序可能会读取存储在您笔记本电脑上的信用卡号,并为您的团队订购任何小马匹萨,然后将剩余的钱转入 ISIS 的某个匿名帐户。 如果您愿意面对这种情况,然后才能访问超出限制的内存,否则,请不要这样做。

总结:只是不要写代码,因为你可以,否则语法是允许的。尝试理解要编写的代码。 提到了数组大小。如果我们不必考虑大小,为什么在堡垒的地方有那个大小?

【讨论】:

  • 程序中给出的它不会给出任何错误,它会给出一些价值。我的问题是它总是垃圾值或零,因为在某些编译器中我得到零
  • @EmbeddedC 请阅读我的回答中链接的 wiki。 :)
  • 好的,答案有什么问题?
猜你喜欢
  • 2020-07-19
  • 2014-12-19
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多