回 帖 发 新 帖 刷新版面

主题:[讨论]大家帮我看看这是什么问题

#include<stdio.h>
#define N 6
void main()
{
    int a[N],i,j,x,t;
    printf("请输入一个数组:\n");
    for(i=0;i<=N-1;i++)
        scanf("%d",&a[i]);
    printf("\n");
    printf("按从小到大的顺序排列:\n");
    for(i=0;i<=N-2;i++)
    {
        for(j=i+1;j<=N-1;j++)
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        printf("%d ",a[i]);
    }
    printf("%d\n",t);
    a[N]=t;
    printf("\n请输入要插入的数字:\n");
    scanf("%d",&x);
    printf("\n重新排列结果:\n");
    if(x<a[0])
    {
        printf("%d ",x);
        for(j=0;j<=N-1;j++)
            printf("%d ",a[j]);
    }
    if(x>a[N])
    {
        for(j=0;j<=N-1;j++)
            printf("%d ",a[j]);
        printf("%d ",x);
    }
    for(i=0;i<=N-2;i++)
        if(x>=a[i]&&x<=a[i+1])
        {
            for(j=0;j<=i;j++)
                printf("%d ",a[j]);
            printf("%d ",x);
            for(j=i+1;j<=N-1;j++)
                printf("%d ",a[j]);
        }
}


在第二次输入后,虽然结果正确,但会弹出“停止工作”。
具体见附件。
环境是windows7、vc++

回复列表 (共5个回复)

沙发

插入一个数以后,访问的内存超界了(上溢出)
你定义的int a[6],插入一个数之后你访问到a[6]了,而合理的最大下标应该是5

板凳

[quote]插入一个数以后,访问的内存超界了(上溢出)
你定义的int a[6],插入一个数之后你访问到a[6]了,而合理的最大下标应该是5[/quote]

哪里溢出了?

3 楼

最简单的例子是这里a[N]=t;

4 楼

谢谢啦,果然如此

5 楼


你定义的数组长度是6,而你将一个数插入一个原来已有6个数的数组,当然会产生溢出

我来回复

您尚未登录,请登录后再回复。点此登录或注册