顺序表三个元素能运行,但是增添到五个就不行

#include
#include
#define MAXLEN 100

typedef struct
{
char key[10];
char name[20];
char sex;
int eng;
int math;
}DATA;

typedef struct
{
DATA ListData[MAXLEN+1];
int ListLen;
}SLType;

void SLInit(SLType *SL)
{
SL->ListLen=0;
}

int SLLength(SLType *SL)
{
return (SL->ListLen);
}

int SLInsert(SLType *SL,int n,DATA data)
{
int i;
if(SL->ListLen>=MAXLEN)
{
printf("顺序表已满,不能插入节点!\n");
return 0;
}
if(nSL->ListLen-1)
{
printf("插入元素序号错误,不能插入!\n");
return 0;
}
for(i=SL->ListLen;i>=n;i--)

{
SL->ListData[i+1]=SL->ListData[i];
}
SL->ListData[n]=data;
SL->ListLen++;
return 1;
}

int SLAdd(SLType *SL,DATA data)

{
if(SL->ListLen>=MAXLEN)
{
printf("顺序表已满,不能插入节点!\n");
return 0;
}
SL->ListData[++SL->ListLen]=data;
return 1;
}

int SLDelete(SLType *SL,int n)

{
int i;
if(nSL->ListLen+1)
{
printf("删除节点序号错误,不能删除节点!\n");
return 0;
}
for(i=n;iListLen;i++)
{
SL->ListData[i]=SL->ListData[i+1];
}
SL->ListLen--;
return 1;
}

DATA *SLFindByNum(SLType *SL,int n)

{
if(nSL->ListLen+1)
{
printf("节点序号错误,不能返回节点!\n");
return NULL;
}
return &(SL->ListData[n]);
}

int SLFindByCont(SLType *SL,char *key)

{
int i;
for(i=1;i<=SL->ListLen;i++)
{
if(strcmp(SL->ListData[i].key,key)==0)
{
return i;
}
}
return 0;
}

int SLAll(SLType *SL)
{
int i;
for(i=1;i<=SL->ListLen;i++)
{
printf("%4s,%4s,%4c,%4d,%4d\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].sex,SL->ListData[i].eng,SL->ListData[i].math);
}
return 0;
}

int main()
{
int i;
SLType SL;
DATA data;
DATA *pdata;
char key[10];

printf("顺序表操作演示!\n");
SLInit(&SL);
printf("顺序表初始化完成!\n");

do{
    printf("输入添加的节点(学号 姓名 性别 英语 高数):");
    fflush(stdin);
    scanf("%s%s%c%d%d",&data.key,&data.name,&data.sex,&data.eng,&data.math);
    if(data.eng)
    {
        if(!SLAdd(&SL,data))
        {
            break;
        }
    }
    else
    {
        break;
    }
}while(1);
printf("\n顺序表中的节点顺序为:\n");
SLAll(&SL);
fflush(stdin);
printf("\n要取出节点的序号:");
scanf("%d",&i);
pdata=SLFindByNum(&SL,i);
if(pdata)
{
    printf("第%d个节点为:%s,%s,%c,%d,%d\n",i,pdata->key,pdata->name,pdata->sex,pdata->eng,pdata->math);
}
fflush(stdin);
printf("\n输入要查找的关键字:");
scanf("%s",key);
i=SLFindByCont(&SL,key);
pdata=SLFindByNum(&SL,i);
if(pdata)
{
    printf("第%d个节点为:%s,%s,%c,%d,%d\n",i,pdata->key,pdata->name,pdata->sex,pdata->eng,pdata->math);    
}
 fflush(stdin);



return 0;

}

调试下,应该是指针没有分配导致越界。