鱼C论坛

 找回密码
 立即注册
查看: 2460|回复: 9

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

[复制链接]
发表于 2013-11-23 12:20:42 | 显示全部楼层 |阅读模式
4鱼币
# 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[MAXSIZE];
        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[i] = 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[i-1];
        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[k+1] = L->data[k];
                }
        }
        L->data[i-1] = 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[i-1];
        if( i< L.length+1)
        {
                for(k=L.length-1; k>=i-1; k--)
                {
                        L.data[k-1] = L.data[k];
                }
        }
        L.length--;
        return OK;
}//ListInsert



运行时崩溃了

运行时崩溃了

最佳答案

查看完整内容

主函数中的InitList函数调用有问题,结构体指针La的值做参数传入InitList函数,相当于将一个地址(指向结构体)传入函数,但是在InitList函数内部,重新申请结构体的内存空间,将会获得一个新的地址,指向申请的结构体,使用指针变量做函数参数的好处是,指针提供了一个地址,函数内部可以将处理后的结果保存到该地址所指向的空间,而无法实现指针变量值的更改,因而La的值还是保持原来的地址,最后的结果就是,InitList内申请了一 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-23 18:15:19 | 显示全部楼层
顶一个,,,,,,,,,,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2013-11-24 01:44:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-24 04:25:24 | 显示全部楼层
不懂  观摩学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-24 16:55:48 | 显示全部楼层
一般情况下,建议你调试,自己找错误,这么长的代码,谁慢慢靠看来搞啊,你调试的自己找哈问题吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-24 21:18:49 | 显示全部楼层
你这程序在vc6.0中应该是通不过编译的,在代码这地方有错
      for(i=0;i<MAXSIZE;i++)
        {
                L->data = 0;
        }

for循环里面应该为L->data[i]=0;
至于无法运行的话自己可以通过设断点慢慢调试,应该可以自己解决的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-24 22:01:34 | 显示全部楼层

他们在系统中已经定义过了吗?  我也不懂  没人说过  只是感觉需要定义一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-24 22:03:31 | 显示全部楼层
北林之中 发表于 2013-11-23 12:20
主函数中的InitList函数调用有问题,结构体指针La的值做参数传入InitList函数,相当于将一个地址(指向结构 ...

谢谢哦  我把重新申请空间的那部分去掉后  重新编译修改了一下  已经可以运行了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-24 22:04:14 | 显示全部楼层
ysm 发表于 2013-11-24 21:18
你这程序在vc6.0中应该是通不过编译的,在代码这地方有错
      for(i=0;idata = 0;
        }

呵呵  谢谢  这个笔误了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 21:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表