在链接列表上复制构造函数

时间:2015-10-19 03:50:23

标签: c++ linked-list crash queue copy-constructor

我只是对我的程序有一个快速的问题。我的复制构造函数有问题。该程序停止工作,我已将问题发现到我的复制构造函数。似乎我做的while while循环并没有像它应该的那样结束。我确定我犯了一些错误,但我不能为我的生活想想它是什么。

,当我的后方为NULL时,循环应该结束。但是当这种情况发生时,它会崩溃我的程序。

我的头文件。

#ifndef CONGERA3_H
#define CONGERA3_H

const int MAX_STRING = 6;
typedef char Element300[MAX_STRING + 1];

class Queue300
{
    public:
        Queue300 ();
        Queue300 (Queue300 &old);
        ~Queue300();
        void enQueue300 (const Element300);
        void deQueue300 (Element300);
        void view300();

    private:
        struct Node300;
        typedef Node300 * NodePtr300;
        struct Node300
        {
            Element300 element;
            NodePtr300 next;
        };
        NodePtr300 front, rear;
};

#endif

我的实施档案。我刚刚包含了复制构造函数和enQueue和deQueue,因为其他一切都运行正常。我也留在常规构造函数中,以防出现问题。

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

Queue300::Queue300 ()
{
    rear = NULL;
    front = rear;

    return;
 }

Queue300::Queue300 (Queue300 &old)
{
    //Node300 * newNode;
    //newNode = new Node300;
    Element300 temp;
    do
    {
        old.deQueue300(temp);
        //cout << temp;
        enQueue300(temp);
    }while (old.rear ->element != NULL);

    return;
}

void Queue300::enQueue300 (const Element300 element)
{
    Queue300 temp;
    Node300 * newNode;
    newNode = new Node300;

    strcpy (newNode -> element, element);
    newNode -> next = rear;
    rear = newNode;

    if (newNode -> next == NULL)
    {
        front = newNode;
    }
    cout << newNode -> element;

}

void Queue300::deQueue300 (Element300 element)
{
    Node300 * newNode;
    newNode = new Node300;
    newNode = rear;
    int i = 0;
    if (rear -> next == NULL)
    {
        strcpy (element, newNode -> element);
        rear = NULL;
    }

    else
    {
         while (newNode -> next != NULL)
        {
            newNode = newNode -> next;
            i = i + 1;
        }
        strcpy(element, newNode -> element);
        newNode = rear;
        for (int j = 0; j < i - 1; j++)
        {
            newNode = newNode -> next;
        }
        newNode -> next = NULL;
     }
}

0 个答案:

没有答案