线性表(顺序表)的销毁有关问题

线性表(顺序表)的销毁问题
各位,以下语句在做线性表(顺序表)销毁的时候, 执行DestoryList函数程序直接包括掉,不知是什么原因!

Status DestoryList(SqList *L)
{
if(L) //这里改成L->data也没有用
{
free(L); //这里改成L->data也没有用
L = NULL; //这里改成L->data也没有用
return OK;
}
else
return ERROR;
}


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

#define MAXSIZE 20 /*存储空间初始分配量*/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status; /*Status是函数的类型,其值是函数结果状态代码,如OK等*/
typedef int ElemType; /*ElemType类型根据实际情况而定,这里假设为int*/
typedef struct
{
ElemType data[MAXSIZE]; /*数组存储数据元素,最大值为MAXSIZE*/
int length; /*线性表当前长度*/
}SqList;

/*操作结果:构造一个空的线性表*/
Status InitList(SqList *L)
{
L->length = 0;
return OK;
}

/*初始条件:线性表L已存在*/
/*操作结果:销毁线性表L*/
Status DestoryList(SqList *L)
{
if(L)
{
free(L);
L = NULL;
return OK;
}
else
return ERROR;
}

/*初始条件:线性表L已存在*/
/*操作结果:将L重置为空表*/
Status ClearList(SqList *L)
{
L->length = 0;
return OK;
}

/*初始条件:线性表L已存在*/
/*操作结果:若L为空表,则返回TRUE,否则返回FALSE*/
Status ListEmpty(SqList L)
{
if(L.length == 0)
return TRUE;
else
return FALSE;
}

/*初始条件:顺序线性表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;
}

int main()
{
SqList L;
ElemType e;//元素值
Status s;//返回状态
int i;//元素位序

i = 10;
s = InitList(&L);
s=DestoryList(&L);
//s = GetElem(L,i,&e);
}

------解决方案--------------------
没有malloc,free必然出错啊。。。
------解决方案--------------------
那样的话 不需要你操作吧  自动销毁
------解决方案--------------------
malloc和free 一定要一一对应,有malloc的地方一定要在某个地方使用free进行释放

使用free之前确定你之前对这个地方进行过malloc操作
------解决方案--------------------
仅供参考线性表(顺序表)的销毁有关问题
http://pan.baidu.com/s/17yIcQ
------解决方案--------------------
引用:
Quote: 引用:

那样的话 不需要你操作吧  自动销毁


我也有这种考虑,但是数据结构的教材里的ADT里有这个函数,或者是对于这种不是动态分配方式产生的顺序表根本就不需要这个函数?

当时那个书我就看得晕乎乎的!有 没关系  空函数吧! 而且重点在于实现  你知道是怎么回事! 人是活的!
------解决方案--------------------
3楼正解。

如果楼主定义的是指针类型,那么就要用malloc动态分配内存,后面才能用free回收内存。

SqList *L = (SqList*)malloc(sizeof(SqList));
    s = InitList(L);
printf("初始化后长度为:%d\n",L->length);
for (i=0;i<MAXSIZE;i++)
{
L->data[i]=i;
}
L->length=i;

for (i=0;i<L->length;i++)
{
printf("%d ",L->data[i]);
}
    s=DestoryList(L);


在mian()函数中加了个测试,可以运行出正确结果。
------解决方案--------------------
仅供参考
//带表头结点的单向链表
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
struct NODE {
    int          data;
    struct NODE *next;
} H,*head,*p,*q,*s1,*s2,*s3,*s4,*s;
int i,j,k,n,t,m;
int main() {
    srand(time(NULL));

    //填写头节点数据
    H.data=-1;
    H.next=NULL;
    head=&H;

    //创建10个节点的单链表
    p=head;
    for (i=0;i<10;i++) {
        q=(struct NODE *)malloc(sizeof(struct NODE));
        if (NULL==q) return 1;
        q->data=rand()%100;//填写0..99的随机值
        q->next=NULL;
        p->next=q;
        p=q;
    }

    //输出整个单链表
    s=head->next;
    while (1) {
        if (NULL==s) {
            printf("\n");
            break;
        }
        printf("%02d->",s->data);
        s=s->next;
    }

    //将值为5的结点插入到单链表的第k个结点前