-2

我是链表的新手。每次我编写代码时都会出现运行时错误。与此相同,我在该程序中也遇到运行时错误。请解释代码中的错误。我试图找出错误,但对我来说一切似乎都很好。请解释。

# include <iostream>
using namespace std;
struct node
{
    int a;
    struct node *next;
};
typedef struct node node;
node *front = NULL;
node *rear = NULL;
void enqu(int b)
{
    node *p;
    p->a = b;
    if(front == NULL)
    {
        p->next = NULL;
        front = p;
        rear = p;
    }
    else
    {
            p->next = NULL;
        rear->next = p;
        rear = p;
    }
}
void dequ()
{
    node *p;
    if (front != NULL)
    {
        if(front == rear)
        {
        front = NULL;
        rear = NULL;
        }
        else
        {
            front=front->next;
        }
        cout<<"no deleated is"<<p->a<<"\n";
    }
    else
    {
        cout<<"queue is empty";
    }
}
void display()
{
    node *p;
    if(p!=NULL)
    {
        p=front;
    while(p!=NULL)
    {
        cout<<p->a;
        p=p->next;
    }
    }
    else
    {
        cout<<"queue is empty";
    }
}
int main()
{
    enqu(1);
    enqu(2);
    enqu(5);
    enqu(6);
    enqu(7);
    enqu(8);
    display();
    dequ();
    dequ();
    display();
    return 0;
}
4

1 回答 1

2

修改未分配的指针是未定义的行为。

void enqu(int b)
{
    node *p;
    p->a = b;
    ^^^^^^^^^

您应该使用node *p = new node;来分配内存,以及delete它们的某处。

void display()
{
    node *p;
    if(p!=NULL)
    {
        p=front;
        ^^^^^^^^

或者,设置p为有效的分配点。例如node *p = front;

你应该阅读很多来学习 C++,阅读:

  • 裸指针 ( new/ delete)
  • 智能指针 ( std::unique_ptr, std::shared_ptr, ...)
  • STL 容器 ( std::list, std::vector, ...)
  • 尝试阅读 StackOverflow 中关于 C++ 的讨论
于 2013-09-27T16:39:30.257 回答