挺好k 发表于 2013-11-23 12:20:42

大家帮忙看看编译通过了 可是运行崩溃了 大家帮忙把错的地方都提出来了吧 谢谢哦

# include<stdio.h>
# include<stdlib.h>

# define        OK                1
# define        ERROR        0
# define        TRUE        1
# define        FALSE        0

# define        MAXSIZE        20

typedef        int        ElemType;
typedef        int Status;

typedef        struct
{
        ElemType        data;
        int length;
}SqList;

Status InitList(SqList *L);
Status DestroyList(SqList *L);
Status ClearList(SqList *L);
Status ListEmpty(SqList L);
Status ListLength(SqList L);
Status GetElem(SqList L,int i,ElemType *e);
Status ListInsert(SqList *L, int i, ElemType e);
Status ListDelete(SqList L, int i, ElemType *e);

void main()
{       
        SqList *La;
        int i, e, k=5;
        InitList(La);
        for(i=1;i<=k;i++)
        {
                printf("输入数字:\n");
                scanf("%d",&e);
                ListInsert(La,i,e);
        }
}

//构造一个空的线性表L。
Status InitList(SqList *L)
{
        int i;
        L = (SqList * )malloc(sizeof(SqList) );
        if(L->data == NULL)
        {
                return ERROR;
        }
        for(i=0;i<MAXSIZE;i++)
        {
                L->data = 0;
        }
        L->length = 0;
        return OK;
}//InstInsert

//线性表已存在,线性表L
Status DestroyList(SqList *L)
{
        free(L);
        return OK;
}//DestroyList

//线性表L已存在,将L重置为空表
Status ClearList(SqList *L)
{
        L->length=0;
        return OK;
}//ClearList

//线性表L已存在,若L为空表,则返回TRUE,否则返回FALSE
Status ListEmpty(SqList L)
{
        if(L.length == 0)
        {
                return TRUE;
        }
        else
        {
                return FALSE;
        }
}//ListEmpty

//线性表已存在,返回L中数据元素的个数
Status ListLength(SqList L)
{
        return (L.length);
}//ListLength

//线性L表已存在,1<=i<=ListLength(L)。用e返回L中第i个数据元素的值
Status        GetElem(SqList L,int i,ElemType *e)
{       
        if(L.length == 0 || i<1        || i>L.length)
        {
                return ERROR;
        }
        *e = L.data;
        return OK;
}//GetElem


//线性L表已存在,1<=i<=ListLength(L)+1。在L中第i个位置之前插入数据元素e,L的长度加1.
Status        ListInsert(SqList *L, int i, ElemType e)
{
        int k=0;
        if(L->length == MAXSIZE || i<1 || i>L->length+1)
        {
                return ERROR;
        }

        if( i <= L->length)
        {
                for(k=L->length-1; k>=i-1; k--)
                {
                        L->data = L->data;
                }
        }
        L->data = e;
        L->length++;
        return OK;
}//ListInsert

//线性表L已存在且非空,1<=i<=ListLength(L)。删除L的第i个数据元素,并用e返回其值,L的长度减1。
Status ListDelete(SqList L, int i, ElemType *e)
{
        int k;
        if( i<1 || i > L.length +1 )
        {
                return ERROR;
        }
        * e = L.data;
        if( i< L.length+1)
        {
                for(k=L.length-1; k>=i-1; k--)
                {
                        L.data = L.data;
                }
        }
        L.length--;
        return OK;
}//ListInsert




北林之中 发表于 2013-11-23 12:20:43

主函数中的InitList函数调用有问题,结构体指针La的值做参数传入InitList函数,相当于将一个地址(指向结构体)传入函数,但是在InitList函数内部,重新申请结构体的内存空间,将会获得一个新的地址,指向申请的结构体,使用指针变量做函数参数的好处是,指针提供了一个地址,函数内部可以将处理后的结果保存到该地址所指向的空间,而无法实现指针变量值的更改,因而La的值还是保持原来的地址,最后的结果就是,InitList内申请了一个空间,但是函数结束后,La无法指向这个空间,还是指向原来的(不过main函数中没有为La赋初值,我这边V6.0编译会报错),因此需要做一些修改,以达到La指向新申请的空间的目的;

尽处叹飘零 发表于 2013-11-23 18:15:19

顶一个,,,,,,,,,,,,

bestainan 发表于 2013-11-24 01:44:05

神论教主 发表于 2013-11-24 04:25:24

不懂观摩学习一下

Ez疯 发表于 2013-11-24 16:55:48

一般情况下,建议你调试,自己找错误,这么长的代码,谁慢慢靠看来搞啊,你调试的自己找哈问题吧!

ysm 发表于 2013-11-24 21:18:49

你这程序在vc6.0中应该是通不过编译的,在代码这地方有错
      for(i=0;i<MAXSIZE;i++)
      {
                L->data = 0;
      }

for循环里面应该为L->data=0;
至于无法运行的话自己可以通过设断点慢慢调试,应该可以自己解决的。

挺好k 发表于 2013-11-24 22:01:34

bestainan 发表于 2013-11-24 01:44 static/image/common/back.gif
OK                1
ERROR      0
   TRUE      1


他们在系统中已经定义过了吗?我也不懂没人说过只是感觉需要定义一下

挺好k 发表于 2013-11-24 22:03:31

北林之中 发表于 2013-11-23 12:20 static/image/common/back.gif
主函数中的InitList函数调用有问题,结构体指针La的值做参数传入InitList函数,相当于将一个地址(指向结构 ...

谢谢哦我把重新申请空间的那部分去掉后重新编译修改了一下已经可以运行了

挺好k 发表于 2013-11-24 22:04:14

ysm 发表于 2013-11-24 21:18 static/image/common/back.gif
你这程序在vc6.0中应该是通不过编译的,在代码这地方有错
      for(i=0;idata = 0;
      }


呵呵谢谢这个笔误了
页: [1]
查看完整版本: 大家帮忙看看编译通过了 可是运行崩溃了 大家帮忙把错的地方都提出来了吧 谢谢哦