数组索引在C中超出界限

数组索引在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;}

据我所知,它试图访问分配给进程或线程的内存,以防止a[11]a[25]而且它超出了堆栈的范围,以防.a[20000].

为什么编译器或链接器不提供一个错误,难道他们不知道数组的大小吗?如果不是,那如何sizeof(a)工作正确吗?


慕虎7371278
浏览 919回答 3
3回答

慕娘9325324

如果试图访问进程不拥有的内存,通常只会出现分段错误。你所看到的a[11](和a[10](顺便提一句)是内存,您的进程是吗?拥有但不属于a[]阵列。a[25000]离a[]它可能完全超出了你的记忆。变幻a[11]由于它会默默地影响不同的变量(或者堆栈框架,这可能会在函数返回时导致不同的分段错误),这就更加阴险了。
打开App,查看更多内容
随时随地看视频慕课网APP