2012-11-19 50 views
-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"); 
} 
+1

完成編寫代碼後,接下來要做的就是調試它。您可以使用調試器,也可以添加打印語句來跟蹤其行爲。這是每個程序員都需要的技能。通過它,逐步縮小問題。你會開始掌握它,下一次會更快。 –

回答

0

您在多次使用未初始化的指針。

  • 排隊指的是rear-> setNext()。如果隊列爲空,則後端未初始化,導致崩潰。
  • Front通過某個節點成員函數返回節點而不檢查非空指針。爲什麼不簡單地返回*前指針?
  • 您的任何類都沒有構造函數。你的指針甚至不是NULL指針,它們只是未初始化的。這是在問煩惱。

我的建議是:

  • 給兩個類的構造函數。
  • 當調用ANY節點的成員函數時,檢查有效的指針。
  • 使用較少的節點成員函數;當你可以的時候返回原始指針。
+0

不工作我初始化構造函數是否錯誤? queue :: queue() { rear = NULL; front = NULL; } –

+0

缺少構造函數並不是唯一的問題。您仍然取消引用空指針。確保每個函數檢查一個空隊列(甚至是出隊!)。 – Gaminic

+0

@Garminic我發現我的enque()方法不正確,你能解決它嗎? –