私の質問: キューにエンキューした唯一のノードをデキュー (実際には削除) するときに、プログラムで実行時エラーが発生するのはなぜですか? 適切な関数にいくつかのデバッグ ステートメントを記述しました。これは、行に問題があることを指摘しています。
フロントを削除します。
プログラムがその行を実行すると、私に応答しないため終了しようとします。私は試した
if(front) フロントを削除します。
しかし、役に立たない。Google で答えを見つけようとしましたが、満足のいく結果は得られませんでした。これは非常に奇妙です。私は数年前から OOP を扱ってきましたが、これは初めてのことです。これが私のコードです:
================================ キュー.cpp =============== ========================
#include <iostream>
#include "Queue.h"
using namespace std;
Queue::Queue()
{
QueueNode * front = NULL;
QueueNode * rear = NULL;
}
Queue::~Queue()
{
while(rear) dequeue();
}
void Queue::enqueue(int row, int col)
{
// create the child state:
QueueNode * newNode;
newNode = new QueueNode;
// write in child state's coordinates:
newNode->row = row;
newNode->col = col;
// enqueue the child state:
if(!front) // if empty, new is front
{
// first node = front and back
front = newNode;
rear = newNode;
}
else // not the first node:
{
newNode->next = rear; // new points to back
rear = newNode; // new is the back
}
}
void Queue::dequeue()
{
cout << "\nHere\n";
delete front;
cout << "\nHere 2\n";
front = rear;
cout << "\nHere 3\n";
while(front->next) front = front->next;
cout << "\nHere 4\n";
}
================================= キュー.h ============== =========================
#ifndef QUEUE_H
#define QUEUE_H
class Queue
{
public:
struct QueueNode
{
// numbers:
int row;
int col;
QueueNode * next;
};
QueueNode * front;
QueueNode * rear;
Queue();
~Queue();
void enqueue(int, int);
void dequeue();
//void traverse(); // scan for repetition of location.
//void displayQueue() const;
};
#endif
ノート:
1) メイン ドライバーのコードは含めませんでした。これは、4 つのスペースをタブに置き換える作業が多く必要になるためです。
2) キュー ノードを 1 つだけキューに入れました。
3) 問題が何であるかを突き止めるのに必死だったので、キュー クラスですべてを公開しました。とりあえずそのままにしておきます。
4) StackOverflow.com で質問するのはこれが初めてなので、何か間違ったことをしたとしても、まだ学習中です。
5) Visual C++ 2008 Express Edition を使用しています。
繰り返しますが、私の質問: キュー内の唯一のノードを削除すると、プログラムで実行時エラーが発生するのはなぜですか?