为什么不检查数组的下标是否超过c语言中数组的大小?

为什么不检查数组的下标是否超过c语言中数组的大小?,c,arrays,memory-management,C,Arrays,Memory Management,我已经写了这段代码,我没有得到任何错误,所以我开始知道,保持检查边界完全是程序员的麻烦。但在静态内存分配中,inta[10]在编译时分配了40个字节,所以它为什么可以在运行时分配更多内存,因为它也在打印相同的内存 #include<stdio.h> main() { int a[10]; for(i=0;i<=100;i++) { a[i]=i; } } #包括 main() { INTA[10]; 对于(i=0;i不,这是。这就是为什么它可能工作,也可能不工作的

我已经写了这段代码,我没有得到任何错误,所以我开始知道,保持检查边界完全是程序员的麻烦。但在静态内存分配中,
inta[10]
在编译时分配了40个字节,所以它为什么可以在运行时分配更多内存,因为它也在打印相同的内存

#include<stdio.h>
main()
{
int a[10];
for(i=0;i<=100;i++)
 {
    a[i]=i;
 }
}
#包括
main()
{
INTA[10];
对于(i=0;i不,这是。这就是为什么它可能工作,也可能不工作的原因。(取决于月球)。你应该避免它。不要认为这是通过分配更多内存来让你的程序工作——它不会

如果你写这篇文章,你是在写程序内存的某个部分,这将导致错误的结果,或者如果它试图写一些不可修改的内存,你将得到错误。无论哪种方式,你都是在调用未定义的行为-从代码崩溃到正确执行,任何事情都可能发生。不要依赖于此


如果它没有分配内存,那么他在哪里存储元素。我只想知道系统内部发生了什么??
它在数组的边界之外写入不应该写入的内存。这就是正在发生的事情。这就是为什么这不是你应该做的。你基本上是在改变程序分配的内存的一部分,而且你不应该改变它。

是什么让你认为它在分配更多的内存emory,与使用未分配的内存和未导致错误相反?因此,如果未分配内存,那么他将在何处存储元素。我只想知道系统内部发生了什么?我真的不知道您的代码如何打印出来。一定很神奇。我没有编写printf语句。我只是想收集你只关注这些陈述。