主题:请教执行到free(q)处为何出错?
我是在VC里面运行这个程序的,功能是:实现带头结点的双向循环链表的构造,建立,输出与销毁,但执行到销毁函数里的free(q)处出错,因此在此请教各位大侠。
程序一开始,输入整型数字,按一次回车,输入一个,输入0时,结束输入,程序段如下:
#include <stdlib.h>
#include <stdio.h>
#define OVERFLOW -2
#define ERROR 0
#define OK 1
#define INFEASIBLE -1
#define NULL 0
#define D "%d"
typedef int ElemType;
typedef int Status;
typedef struct DuLNode{
ElemType data;
struct DuLNode *next,*prior;
}DuLNode,*DuLinkList;
Status InitList(DuLinkList &L) {
DuLNode *p;
if(!(p=(DuLinkList)malloc(sizeof(DuLinkList)))) return OVERFLOW;
L=p;
L->data=NULL;
L->next=L->prior=L;
return OK;
}
Status CreatList(DuLinkList &L){
DuLNode *p,*q;
ElemType temp;
if(L->next==L){
q=L;
scanf(D,&temp); //输入0时结束输入
while(temp){
if(!(p=(DuLinkList)malloc(sizeof(DuLinkList)))) return OVERFLOW;
q->next=p;p->data=temp;p->prior=q;q=p;
scanf(D,&temp);
}
p->next=L;L->prior=p;
}
else return ERROR;
return OK;
}
Status OutList(DuLinkList &L){
DuLNode *p;
int i=0;
p=L->next;
while(p!=L){
printf("[%d]:"D"\t",++i,p->data);
p=p->next;
}
return OK;
}
Status DestroyList(DuLinkList &L){
DuLNode *p,*q;
p=L->next;
while(p!=L){
q=p;p=p->next;free(q); [color=800000]//执行到free(q)处为何出错?[/color] }
free(p);
L=NULL;
return OK;
}
void main(){
DuLinkList L;
InitList(L);
CreatList(L);
OutList(L);
DestroyList(L);
}
程序一开始,输入整型数字,按一次回车,输入一个,输入0时,结束输入,程序段如下:
#include <stdlib.h>
#include <stdio.h>
#define OVERFLOW -2
#define ERROR 0
#define OK 1
#define INFEASIBLE -1
#define NULL 0
#define D "%d"
typedef int ElemType;
typedef int Status;
typedef struct DuLNode{
ElemType data;
struct DuLNode *next,*prior;
}DuLNode,*DuLinkList;
Status InitList(DuLinkList &L) {
DuLNode *p;
if(!(p=(DuLinkList)malloc(sizeof(DuLinkList)))) return OVERFLOW;
L=p;
L->data=NULL;
L->next=L->prior=L;
return OK;
}
Status CreatList(DuLinkList &L){
DuLNode *p,*q;
ElemType temp;
if(L->next==L){
q=L;
scanf(D,&temp); //输入0时结束输入
while(temp){
if(!(p=(DuLinkList)malloc(sizeof(DuLinkList)))) return OVERFLOW;
q->next=p;p->data=temp;p->prior=q;q=p;
scanf(D,&temp);
}
p->next=L;L->prior=p;
}
else return ERROR;
return OK;
}
Status OutList(DuLinkList &L){
DuLNode *p;
int i=0;
p=L->next;
while(p!=L){
printf("[%d]:"D"\t",++i,p->data);
p=p->next;
}
return OK;
}
Status DestroyList(DuLinkList &L){
DuLNode *p,*q;
p=L->next;
while(p!=L){
q=p;p=p->next;free(q); [color=800000]//执行到free(q)处为何出错?[/color] }
free(p);
L=NULL;
return OK;
}
void main(){
DuLinkList L;
InitList(L);
CreatList(L);
OutList(L);
DestroyList(L);
}