C++ 删除所有节点后,链表崩溃

C++ 删除所有节点后,链表崩溃,c++,linked-list,C++,Linked List,我们的家庭作业要求我们使用链表创建一个“Staque”(实现堆栈和队列的功能)。在列表中输入偶数时,它们应位于列表顶部,奇数位于底部。因此,如果插入的值是814679,它应该输出648179。然后删除上面的两个偶数和下面的奇数,这将得到817。除删除所有节点外,所有操作都正常。因此,当输入3个或更少的值时,程序崩溃。现在我得交作业了,因为作业今晚就要交了,但我只是想知道如何解决这个问题。任何帮助都将不胜感激 这是我的密码: 司机: #include <iostream> #inclu

我们的家庭作业要求我们使用链表创建一个“Staque”(实现堆栈和队列的功能)。在列表中输入偶数时,它们应位于列表顶部,奇数位于底部。因此,如果插入的值是814679,它应该输出648179。然后删除上面的两个偶数和下面的奇数,这将得到817。除删除所有节点外,所有操作都正常。因此,当输入3个或更少的值时,程序崩溃。现在我得交作业了,因为作业今晚就要交了,但我只是想知道如何解决这个问题。任何帮助都将不胜感激

这是我的密码:

司机:

#include <iostream>
#include "Staq.h"
using namespace std;

int main()
{
    Staq *std = new Staq();

    int numofvals;
    int i;
    int x;
    cout << "How many values in the staque?" << endl;
    cin >> numofvals;
    cout << numofvals << " values will be entered in the staque." << endl << endl;;

    for(i=1; i<=numofvals; i++)
    {
        cout << "Enter value " << i << ":" << endl;
        cin >> x;
        std->AddNode(x);
    }

    cout << endl;
    cout << "Staque:" << endl;
    std->PrintList();

    std->DeleteNode();

    cout << "\nStaque after deletions:" << endl;

    std->PrintList();

    return 0;
}
#包括
#包括“Staq.h”
使用名称空间std;
int main()
{
Staq*std=新Staq();
国际货币单位;
int i;
int x;
不能数;
下一步;
删除临时文件;
如果(头->数据%2==0)
{
温度=水头;
头部=头部->下一步;
删除临时文件;
}
}
温度=水头;
while(临时->下一步->下一步!=NULL)
{
温度=温度->下一步;
}
如果(临时->数据%2!=0)
{
temp2=temp->next;
temp->next=NULL;
删除temp2;
}
}
void Staq::PrintList()
{
curr=头;
while(curr!=NULL)
{
下一步是收集数据;
}
}
标题:

#include <iostream>
using namespace std;

#ifndef STAQ_H
#define STAQ_H

class Staq
{
public:
    Staq();
    ~Staq();

    void AddNode(int addData);
    void DeleteNode();
    void PrintList();

private:
    class node
    {
    public:
        int data;
        node* next;
    };

    typedef class node* nodePtr;

    nodePtr head;
    nodePtr curr;
    nodePtr temp;
};

#endif
#包括
使用名称空间std;
#ifndef STAQ_H
#定义STAQ_H
类Staq
{
公众:
Staq();
~Staq();
void AddNode(int addData);
void DeleteNode();
作废打印列表();
私人:
类节点
{
公众:
int数据;
节点*下一步;
};
typedef类节点*nodePtr;
无受体头;
无接受电流;
nodePtr温度;
};
#恩迪夫

删除节点
中,您尝试访问第一个节点的数据,即使没有节点。第二个节点也是如此

while(temp->next->next)
是危险的,因为
temp->next
可能是
NULL
,因此使
temp->next->next
成为访问空指针的权限。我猜你的意思是
temp->next
。您可能还需要验证
temp

最后,尽管不相关,
temp2=temp->next
会导致内存泄漏,因为现在没有人指向在
DeleteNode
开头创建的新节点

#include <iostream>
using namespace std;

#ifndef STAQ_H
#define STAQ_H

class Staq
{
public:
    Staq();
    ~Staq();

    void AddNode(int addData);
    void DeleteNode();
    void PrintList();

private:
    class node
    {
    public:
        int data;
        node* next;
    };

    typedef class node* nodePtr;

    nodePtr head;
    nodePtr curr;
    nodePtr temp;
};

#endif