Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
537 views
in Technique[技术] by (71.8m points)

c 超出数组边界的值的问题

#include<stdio.h>

int m=10,n=5,a[10]={10,15,20} ;
void f1(void);
void f2(int m);
main(){
       int i;
    for(i=0;i<7;i++){
        f1();
    }
    f2(1);
    printf("
%d,%d",a[m],a[n]);    
}
void f1(void){
    static int n=3;
    a[n]=a[n-1]+a[n-2]+a[n-3];
    n++;
}
void f2(int m){
    for(;m<3;m+=2){
        int m;
        for(m=1;m<4;m++){
            printf("%d,",a[m++]);
        }    
    }
}

输出:
15,45,
10,145

输出的第二行 a[m]的值为什么是10? 这里m的值是10,a[10]是超出数组边界的啊


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

编译器并不检查数组越界,运行时出现错误是操作系统检测到的异常。而操作系统只检测要访问的这段内存是否属于该程序,而不是数组越界。

如果精心的控制越界,并给这些位置赋值,就可以改变程序正在执行的代码!!!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...