超出定义的数组大小不会溢出吗

这是个求中位数的题目 (6-11 求自定类型元素序列的中位数 )

萌新想问一下既然这个定义的数组是A[10]为什么超过10个的数据也可以处理呢,我用visual C++ 的时候得出结果同时报错了,但是PTA还是算它通过了(只是超时了)

图片说明

#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Median( ElementType A[], int N );

int main ()
{
    ElementType A[MAXN];
    int N, i;

    scanf("%d", &N);
    for ( i=0; i<N; i++ )
        scanf("%f", &A[i]);
    printf("%.2f\n", Median(A, N));

    return 0;
}

ElementType Median( ElementType A[], int N )
{int i,j,k;
float t;
    for(i=0;i<N;i++)
    {for(j=1;j<N-i;j++){
        if(A[i]>A[i+j]){
            t=A[i];
            A[i]=A[i+j];
            A[i+j]=t;
        }
    }}
    k=N/2;

    return A[k];
}

超出大小肯定是溢出的。个人理解是安全机制的不同。

简单来说,就是闯红灯未必会出事故,但是可能会出事故。
C语言不会对溢出检查,因此这么写代码合法,但是是否出错取决于你是否侵占了别的变量或者代码的内存。
好比闯红灯侵犯了别人的道路,但是碰巧没有车,所以没事,运气不好,人家的车过来了,你就撞了。


问题解决的话,请点采纳

会,就看编译器能不能识别了,要知道溢出也是一种黑客攻击手段,而你知道它溢出了只是因为编译器提醒你了。
你的代码运行超时有可能是后台代码运行异常拖到了超时才处理,就像你电脑报错但你一直不点确定一样。