零大小的数组?(Array of zero size?)

2019-07-29 04:09发布

一般来说,我们在声明格式如下数组:

DataType array_name[SIZE];

所以,如果我试图创建0例如长度数组

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

我没有得到任何错误,当上面的代码是executed.In这种情况下,对于一个整数内存分配?

Answer 1:

为什么1号线不产生任何编译错误?
理想情况下,它应该!
这是不合法的代码创建数组的大小0本地存储。
理想情况下,编译器应该发出你的错误,可能是一些编译器扩展允许这种编译,但按照标准,这不是一个有效的code.Try与编译-pedantic

参考:

C ++ 03标准8.3.4 / 1:

如果_constant表达+(5.19)时,它应是一个积分常数表达式,其值应大于零。

进一步,
为什么2号线不产生任何编译错误?
因为写超出分配的数组的边界是未定义的行为 。 未定义的行为并不需要编译器为您提供任何诊断。 需要注意的是,一旦代码表现出未定义行为字面上任何事情都有可能发生,全盘皆输。



Answer 2:

因为C / C ++不会做阵列的任何范围检查,你没有得到任何错误。 arr[10000000]不会给你可以编译错误。

会发生什么事是你的,它不是一部分上写一些记忆一些地方arr ,谁知道会发生什么。 这可能导致访问违反和崩溃或随机腐败的一些其他数据结构。

这是一个缓冲区溢出。



文章来源: Array of zero size?
标签: c++ arrays size