如果我这样做会怎么样?
int a[10];
a[10] = 1;
数组元素从0到9,所以我基本上初始化一个超出其大小的整数。这会导致错误并执行相同的错误,如果有的话,也适用于char数组吗?我知道你声明一个[size + 1]为null值留下一个元素,但这就是它......
编辑:除了缓冲区溢出之外,还会导致其他任何问题吗?
答案 0 :(得分:1)
这种行为是未定义的,并且可能从“没有发生”而不是“几分之后的坚实崩溃”变成“完全奇怪的海森堡”。它也很可能受到编译标志的影响。
但真正发生的是你将数组放在堆栈上然后写入其下面的“其他东西”。 “其他东西”可能会有很大差异,只有在查看生成的汇编代码时才能确定。
[int a [10]] [以前的变量,甚至可能是返回地址]
简而言之:不要这样做,并尝试使用启用堆栈检查和警告的编译器设置。 如果您碰巧使用最近的gcc或clang,您应该收到警告,表示您访问越界,并且您还可以启用“清理程序”,这将警告您在程序运行时发生的此类访问。