在C+中实现基于链表的队列+;:错误:free()无效指针:0x000…400c1c*(内核转储) 我在C++中学习算法>,现在我想实现基于链表的队列。以下是我的代码: #include <iostream> using nam

在C+中实现基于链表的队列+;:错误:free()无效指针:0x000…400c1c*(内核转储) 我在C++中学习算法>,现在我想实现基于链表的队列。以下是我的代码: #include <iostream> using nam,c++,queue,destructor,C++,Queue,Destructor,在C+中实现基于链表的队列+;:错误:free()无效指针:0x000…400c1c*(内核转储) 我在C++中学习算法>,现在我想实现基于链表的队列。以下是我的代码: #include <iostream> using namespace std; template <typename T> class Node { public: typedef T data_t; typedef Node<T>*

在C+中实现基于链表的队列+;:错误:free()无效指针:0x000…400c1c*(内核转储)

我在C++中学习算法>,现在我想实现基于链表的队列。以下是我的代码:

#include <iostream>
using namespace std;
template <typename T>
class Node
{
    public:
        typedef T data_t;
        typedef Node<T>* NodePtr;
        data_t item;
        NodePtr next;
};
// Queue: FIFO
 template <typename T>
class Queue
{
    public:
        typedef T data_t;
        Queue();

        bool isEmpty()
        {
            return first == nullptr;
        }
        size_t size()
       {
           return N;
       }

       void enqueue(data_t d)
       {
            //temp = new Node<data_t>();
            temp = last;
            last = new Node<data_t>();
            last->item = d;
            last->next = nullptr;
            if(isEmpty())
                first = last;
            else
                temp->next = last;

            N++;
        }

        data_t dequeue()
        {
            data_t t = first->item;
            temp = first;
            first = first->next;
            temp->next = nullptr;
            delete temp;
            temp = nullptr;
            N--;
            if(isEmpty())
                last = nullptr;

            return t;
        }
        ~Queue();
    private:
        int N = 0;
        typename Node<data_t>::NodePtr first = nullptr;
        typename Node<data_t>::NodePtr last = nullptr;
        typename Node<data_t>::NodePtr temp = nullptr;
};

 template <typename T>
 Queue<T>::Queue()
{
    N = 0; 
    first = nullptr;
    last = nullptr;
    temp = nullptr;
}
template <typename T>
Queue<T>::~Queue()
{
    cout << "In destructure function ..." << endl;
    while(!isEmpty())
    {
        temp = first->next;
        delete first;
        first = temp;
        N--;
    }
}

int main(int argc, char **argv)
{
    Queue<int> que;
    que.enqueue(1);
    que.enqueue(2);
    cout << "queue's size = " << que.size() << endl;
    cout << que.dequeue() << endl;

    return 0;
}
#包括
使用名称空间std;
模板
类节点
{
公众:
数据类型定义;
typedef节点*NodePtr;
数据项;
NodePtr-next;
};
//队列:先进先出
模板
类队列
{
公众:
数据类型定义;
队列();
布尔是空的
{
return first==nullptr;
}
大小
{
返回N;
}
无效排队(数据)
{
//temp=新节点();
温度=最后一次;
last=新节点();
最后->项目=d;
last->next=nullptr;
if(isEmpty())
第一个=最后一个;
其他的
临时->下一个=最后一个;
N++;
}
数据出列()
{
数据\u t=第一个->项目;
温度=第一;
第一个=第一个->下一个;
temp->next=nullptr;
删除临时文件;
温度=零PTR;
N--;
if(isEmpty())
last=nullptr;
返回t;
}
~Queue();
私人:
int N=0;
typename节点::NodePtr first=nullptr;
typename节点::NodePtr last=nullptr;
typename节点::NodePtr temp=nullptr;
};
模板
队列::队列()
{
N=0;
第一个=空PTR;
last=nullptr;
温度=零PTR;
}
模板
队列::~Queue()
{

cout
temp
应该是一个局部变量,无论它在哪里使用,nt都是一个成员变量,而且整个事情都不是线程安全的。有很多可用的工作代码。检查它。感谢您的回复。实际上,我已经使用了相同的代码结构来实现基于“链表”的“堆栈”,并且可以无错误地运行。但是我会再试一次根据你的建议…,也许你的编译方式有问题?我使用ubuntu 14.04下的g++-std=c++11来编译代码。我想使用gcc 6.3的“ideone”网站可能有助于消除代码中的一些隐含错误。无论如何,谢谢你的帮助