读书人

关于数据结构中free()函数使用的有关问

发布时间: 2012-09-24 13:49:41 作者: rapoo

关于数据结构中free()函数使用的问题
如题 在写链式表,链栈,链队列时,总会遇到要删除一个节点或是一个队列的操作,是用free()的,可是小弟也不知道怎么一用就错,不用的话就对
下面以链式栈为例:

C/C++ code
#include <stdio.h>#include<stdlib.h>#define  Error 1#define  Ok 0typedef  int Status;typedef  int QElemType;typedef  struct QNode {    QElemType  data;    struct QNode *next;}QNode,*QueuePtr;typedef  struct{    QueuePtr  front;    QueuePtr  rear;}LinkQueue;Status Ini_Queue(LinkQueue &Q){    Q.rear=(QNode*)malloc(sizeof(QueuePtr));    if(!Q.rear)      {printf("输错了啊");  return Error;}    Q.front=Q.rear;    Q.rear->next=NULL;    return Ok;}/*Status DestoryQueue(LinkQueue &Q){    while(Q.front)    {        Q.rear    }}*/Status InQueue(LinkQueue &Q,QElemType e){    QueuePtr p;    p=(QueuePtr)malloc(sizeof(QueuePtr));    if(!p)      {printf("出错了啊");  return Error;}    p->data=e;    p->next=NULL;    Q.rear->next=p;    Q.rear=p;    return Ok;}Status Delete_Queue(LinkQueue &Q,QElemType &e ){    QNode *p;    if(Q.front==Q.rear)   return Error;    printf("您删除的元素为:");    p=Q.front->next;    e=p->data;    Q.front->next=p->next;    if(p==Q.rear)   Q.rear=Q.front;    /*p->next=NULL;    free(p); */               //  ??????????????????????????????    return Ok;}void print(LinkQueue Q){    LinkQueue p;    p=Q;    printf("您输入的队列为");    while(p.front!=p.rear)    {        printf("%d",p.front->next->data);        p.front=p.front->next;    }    printf("\n");}void main(){    LinkQueue Q; int e,i;    Ini_Queue(Q);    printf("请输入队列的值");    scanf("%d",&e);    while(e!=0)    {       InQueue(Q,e);       scanf("%d",&e);    }    print(Q);    printf("您是否要删除元素(1或0)");    scanf("%d",&i);    if(i==1)    {        Delete_Queue(Q,e);        printf("%d",e);    }    else         printf("按任意键退出");    getchar();    getchar();

我注释问号的地方就是问题所在。。。
我真心不知道到底是什么错误。。。
求各位指导下哈

[解决办法]
分配的内存有问题吧
Status InQueue(LinkQueue &Q,QElemType e){
中的
Q.rear=(QNode*)malloc(sizeof(QueuePtr)); ??

Status InQueue(LinkQueue &Q,QElemType e){
中的
p=(QueuePtr)malloc(sizeof(QueuePtr)); ??

你分配的都是指针 而不是这个结构体的大小
sizeof(QueuePtr) = 4
sizeof(QNode) = 8

读书人网 >C语言

热点推荐