相关疑难解决方法(0)

数组索引在C中超出范围

为什么C在数组索引超出限制的情况下进行区分

#include <stdio.h>
int main()
{
    int a[10];
    a[3]=4;
    a[11]=3;//does not give segmentation fault
    a[25]=4;//does not give segmentation fault
    a[20000]=3; //gives segmentation fault
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,它正在尝试访问分配给进程或线程的内存,如果是a[11]或者a[25]它正在超出堆栈边界a[20000].

为什么编译器或链接器没有出错,他们不知道数组大小?如果没有,那么如何sizeof(a)正常工作?

c c++ arrays

44
推荐指数
3
解决办法
5万
查看次数

为什么在C中可以访问绑定数组?

可能重复:
C中的数组索引超出
范围可以在其范围之外访问本地变量的内存吗?
C没有越界错误

我正在尝试这段代码,

#include <stdio.h>

main(){
int a[2],i;
a[5] = 12;
for(i=0;i<10;i++){
    printf("%d\n", a[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我输出:

1053988144
32767
0
3
0
12
-1267323827
32716
0
0
Run Code Online (Sandbox Code Playgroud)

为什么[5]可以访问?不应该通过RunTime错误吗?

c arrays

2
推荐指数
1
解决办法
431
查看次数

标签 统计

arrays ×2

c ×2

c++ ×1