数组中的元素太多了!

spi*_*man 5 c arrays size double

对不起,如果这是一个菜鸟问题:(.

一块C代码.

int array[5];
int cnt;

for(cnt = 0; cnt <= 10; cnt+=1)
{
      array[cnt] = cnt;
}
Run Code Online (Sandbox Code Playgroud)

应该给出错误吧?没有!工作良好!但那是为什么呢?似乎 - 在第一行 - 定义了超过双倍大小(11)的数组.您甚至可以稍后访问数组[5到10].这让我很困惑.定义数组[4或更少]时它停止工作...

提前致谢.

Sim*_*son 23

它可能恰好适用于您的特定编译器和计算机,但您不应指望它.

根据C语言规范的代码行为未定义.这意味着它可能会按照您的意愿行事,或者可能导致计算机崩溃,或者可能导致恶魔飞出您的鼻子.

与Java和C#等高级语言不同,C信任您并且不对数组的边界执行显式检查.你应该负责,而不是超越阵列的边界.

  • @RBerteig:我不认为"defnestration"(defenstration不是一个词)意味着你认为它意味着什么.在英语中,这将是通过窗口投掷某人/某事的行为.http://en.wikipedia.org/wiki/Defenestration (2认同)

Don*_*eld 16

如果您对"作品"的定义与"尚未崩溃"同义,那么这只会"有效".

  • +1:我可能必须"借用"该行以进行下一次代码审查;-) (2认同)

小智 5

您所看到的是由于您使用无效索引访问数组而导致的未定义行为.未定义的行为意味着任何事情都可能发生,包括您的程序似乎正常工作.