请帮我我看下这个程序,编译的时候没问题,一运行exe就出错

时间:2021-08-11 15:59:27
#include <stdio.h>
#include <stdlib.h>

/*顺序表的定义:*/
#define ListSize 10
typedef int DataType;
typedef struct{
DataType data[ListSize];
int length;
}SeqList;

//顺序表的初始化
void initList(SeqList*L){  //构造一个空的线性表L
    L=(SeqList*)malloc(sizeof(SeqList)); 
L->length=0;
}


//顺序表的插入
void insertList(SeqList * L, DataType x, int i)
{
int j;
for (j=L->length-1; j>=i-1; --j)
       L->data[j+1]=L->data[j];
L->data[i-1]=x;
    ++L->length;
}

//顺序表的删除
void deleteList(SeqList * L, int i)
{
int j;
for (j=i; j<L->length; ++j)
       L->data[j-1]=L->data[j]; 
    --L->length; 
}

//顺序表的更改
void updateList(SeqList * L, DataType x, int i)
{
L->data[i-1]=x;
}

//获取长度 
int getLength(SeqList * L)
{
return L->length;
}

//获取元素 
DataType getElem(SeqList * L, int i)
{
   return L->data[i-1];
}


 
//操作函数
void debugPrint(SeqList * L)
{
int i, n = L->length;
for(i = 0; i < n - 1; i++)
printf("%d,", L->data[i]);
printf("%d\n", L->data[n - 1]);
}

//主函数 
int main()
{
SeqList l;
int i;

initList(&l);
for(i = 0; i < ListSize - 1; i++)
insertList(&l, i + 1, i + 1);
printf("orginal list : ");
debugPrint(&l);

for(i = 0; i < ListSize; i++)
{
insertList(&l, 0, i + 1);
printf("insert 0 at position %d : ", i + 1);
debugPrint(&l);

updateList(&l, -1, i + 1);
printf("update the element at position %d to -1 : ", i + 1);
debugPrint(&l);
printf("current element at position %d is %d.\n", i + 1, getElem(&l, i + 1));

deleteList(&l, i + 1);
printf("delete the element at position %d : ", i + 1);
debugPrint(&l);

printf("\n");
}
}

1 个解决方案

#1


void initList(SeqList*L)
{
#if 0
    //构造一个空的线性表L

    L=(SeqList*)malloc(sizeof(SeqList));
#endif
    L->length = 0;
}

去掉malloc申请空间,参考一下吧

main函数里定义的变量l是结构体变量,不是指针,因此,无需malloc空间,只需要初始化length即可。

#1


void initList(SeqList*L)
{
#if 0
    //构造一个空的线性表L

    L=(SeqList*)malloc(sizeof(SeqList));
#endif
    L->length = 0;
}

去掉malloc申请空间,参考一下吧

main函数里定义的变量l是结构体变量,不是指针,因此,无需malloc空间,只需要初始化length即可。