为什么没有检查以查看用于数组的下标是否超过c语言中的数组大小? [重复]

问题描述 投票:-2回答:1

这个问题在这里已有答案:

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

#include<stdio.h>
main()
{
int a[10];
for(i=0;i<=100;i++)
 {
    a[i]=i;
 }
}

enter image description here

c arrays memory-management
1个回答
1
投票

不,这是undefined behavior。这就是为什么它可能起作用而它可能不起作用。 (取决于月亮)。你应该避免它。不要以为这会让你的程序通过分配更多的内存而工作 - 事实并非如此。

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

so if it's not allocating memory so where he is storing the elements. I just want to know what is happening internally in the system??

好吧,它是从不应该写入的数组的边界写入内存。这就是发生的事情。这就是为什么这不是你应该做的。您基本上正在更改正在分配程序的内存部分,而且您不应该更改它。

© www.soinside.com 2019 - 2024. All rights reserved.