c语言编译器dev.cpp求教?
#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef int elementtype;

typedef struct
{
    elementtype s[MAXLEN];
    int len;
} SqList;

int DelList(SqList *sql,int i,elementtype *x)
{
    int k;
    if((i<1)||(i>sql->len))
    {
        printf("删除的位置不合法!");
        return(0);
    }
    *x=sql->s[i];
    for(k=i+1;k<=sql->len;k++)
       sql->s[k-1]=sql->s[k];
    sql->len--;
    return(1); 

}  

int main()
{
    SqList *seq;
    int p,r,*q,i;
    seq=(SqList*)malloc(sizeof(SqList));
    q=(int*)malloc(sizeof(int));
    printf("输入链表的长度:");
    scanf("%d",&r);
    seq->len=r;
    printf("输入线性表的个元素值:\n");
    for(i=1;i<=seq->len;i++)
      scanf("%d",&seq->s[i]);
    printf("请输入要删除的位置\n");
    scanf("%d",&p);
    DelList(seq,p,q);
    printf("删除的元素为:%d\n",*q);
    return(0);
}

在dev.cpp 5.4.0中编译为什么运行会不成功? 哪里出问题了 求大佬

2个回答

我这里用devc++自带的gnu c++编译,可以编译,无论是c还是cpp都可以。
但是你程序有不少逻辑错误

for(k=i+1;k<=sql->len;k++)
这里k<=sql->len 越界了。

for(i=1;i<=seq->len;i++)
这里i=0;i<seq->len

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复雨望: 但是被撞了,你不应该怪撞你的车,应该怪你闯红灯了。
4 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复雨望: 你数组越界了,数组不越界肯定可以,越界了,可能不暴露出来,也可能暴露出来。好比不闯红灯不会被车撞,但是闯红灯可能会撞也可能不会。
4 个月之前 回复
yt_jisuanji
雨望 是这样的 我本来数组真真的长度就是定义的s[MAXLEN] 也就是s[100],那个设的len表示是数据的长度 我看的这本书为了方便都是用s[1]开始到s[len] 的 就是用dev.cpp 5.4.0跑不动,其他的版本的都跑得动 但是我们比赛要求用5.4.0这个版本
4 个月之前 回复

数组下标计数是从0-(n-1),而不是直观上的1-n。所以你的两个for循环都访问到了数组以外的元素,即数组越界,运行时出错。

yt_jisuanji
雨望 是这样的 我本来数组真真的长度就是定义的s[MAXLEN] 也就是s[100],那个设的len表示是数据的长度 我看的这本书为了方便都是用s[1]开始到s[len] 的 就是用dev.cpp 5.4.0跑不动,其他的版本的都跑得动 但是我们比赛要求用5.4.0这个版本
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问