-1

キュー データ構造を実装していますが、アプリがクラッシュします。私は、キュー クラスのノード ポインター front または Front() メソッドで何か間違ったことをしていることを知っています

#include <iostream>
using namespace std;

class Node 
{ 
    public: 
        int get() { return object; }; 
        void set(int object) { this->object = object; }; 
        Node * getNext() { return nextNode; }; 
        void setNext(Node * nextNode) { this->nextNode = nextNode; }; 
    private: 
        int object; 
        Node * nextNode; 
};

class queue{
    private:
        Node *rear;
        Node *front;
    public:
        int dequeue() 
        { 
            int x = front->get(); 
            Node* p = front; 
            front = front->getNext(); 
            delete p; 
            return x; 
        }

        void enqueue(int x) 
        { 
            Node* newNode = new Node(); 
            newNode->set(x); 
            newNode->setNext(NULL); 
            rear->setNext(newNode); 
            rear = newNode; 
        }

        int Front() 
        { 
            return front->get(); 
        } 

        int isEmpty() 
        { 
            return ( front == NULL ); 
        }
};
main()
{
    queue q;
    q.enqueue(2);
    cout<<q.Front();

    system("pause");
}
4

1 に答える 1

0

何度か初期化されていないポインターを使用しています。

  • Enqueue は、rear->setNext() を参照します。キューが空の場合、rear は初期化されていないため、クラッシュが発生します。
  • Front は、null 以外のポインターをチェックせずに、いくつかの Node メンバー関数によってノードを返します。*フロントポインタを単純に返さないのはなぜですか?
  • どのクラスにもコンストラクターがありません。あなたのポインターは NULL ポインターではなく、初期化されていないだけです。それはトラブルを求めています。

私のアドバイス:

  • 両方のクラスにコンストラクターを与えます。
  • ANY Node メンバー関数を呼び出すときは、有効なポインターを確認してください。
  • Node メンバー関数の使用を減らします。可能な場合は生のポインターを返します。
于 2012-11-19T11:03:18.440 に答える