回 帖 发 新 帖 刷新版面

主题:好像是指针问题

#include<iostream>
using namespace std;
typedef struct node
{
    int data;
    struct node *next;
}QNode;
typedef struct
{
    QNode *front, *rear;
}LQueue,*link;
link initqueue()
{
    link L;
    L=new(LQueue);
    L->rear=L->front;
    L->front->next=NULL;
    return L;
}
void inqueue(link q)
{
    QNode *p;
    int x,n,i;
    cout<<"请输入数字个数:"<<endl;
    cin>>n;
    cout<<"输入数字:";
    for(i=0;i<n;i++)
    {
    cin>>x;
    p=new(QNode);
    p->data=x;
    p->next=NULL;
    q->rear->next=p;
    q->rear=p;
    }
}
int outqueue(link q)
{
    QNode *p;
    int e;
    if(q->front==q->rear)
        cout<<"error"<<endl;
    p=q->front->next;
    q->front->next=p->next;
    e=p->data;
    free(p);
    if(q->rear==NULL)
        q->front=q->rear;
    return e;

}
main()
{
    link h;
    h=initqueue();
    inqueue(h);

}

回复列表 (共1个回复)

沙发

如果程序并没有正常的运行最后而异常终止了,一般是访问违例的错误。首先我们要找到是那一句语句引起的。方法很简单,我一般是使用下面两条宏:
#define __l__  printf("\nline %03d ",__LINE__)
#define __p__  printf("\nline %03d ",__LINE__),getch()

首先从主函数main找起,先找到是哪个函数的问题,然后到那个函数里面去找。
从您的代码中 我先找到了 h=initqueue(); 这一句有问题。
然后又找到了initqueue函数里面的这一句L->front->next=NULL;有问题。
    L=new(LQueue);
    L->rear=L->front;
    L->front->next=NULL;
您先用new得到了一个LQueue类型的对象,这个对象里面的成员是2个指针 QNode *front, *rear;
这样的话,front和rear还没有给它们分配空间,但是又使用的L->front这个指针的对象。当然这就会有问题了。在 L->front->next=NULL;前面加上这一句L->front = new(QNode);应该就可以了。
您的代码我并没仔细看,不知道还有没有其他错误。

我来回复

您尚未登录,请登录后再回复。点此登录或注册