繁体   English   中英

零大小的数组?

[英]Array of zero size?

通常,我们以以下格式声明数组:

DataType array_name[SIZE];

所以如果我尝试为例如创建0长度数组

int arr[0]; //Line#1
arr[0] = 5; //Line#2

执行上面的代码时我没有收到任何错误。在这种情况下,是否为单个整数分配了内存?

为什么Line#1不会产生任何编译错误?
理想情况下,应该!
在本地存储上创建大小为0的数组不是合法的代码。
理想情况下,编译器应该向您发出错误消息,可能是某些编译器扩展允许它编译,但按照标准,这不是有效的-pedantic 。请尝试使用-pedantic编译。

参考:

C ++ 03标准8.3.4 / 1:

如果存在_constant-expression +(5.19),则它应为整数常量表达式,并且其值应大于零。

进一步,
为什么Line#2不会产生任何编译错误?
因为超出分配数组范围的写入操作是Undefined Behavior 未定义行为不需要编译器为您提供任何诊断。 请注意,一旦代码表现出未定义的行为,任何事情都可能发生,所有的赌注都将关闭。

您不会得到任何错误,因为C / C ++不会对数组进行任何范围检查。 arr[10000000]也不会给您编译错误。

发生的情况是,您正在将某些内存写入不属于arr的堆栈中的某些位置,并且谁知道会发生什么。 这可能会导致访问冲突并崩溃或随机破坏某些其他数据结构。

那是缓冲区溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM