Мой запрос: почему моя программа придумала ошибку времени выполнения при удалении (фактически, удалении) единственного узла, который я заключил в очередь? Я написал несколько отладочных инструкций в соответствующей функции, которая указывает, что в строке есть что-то неявное:Не удается удалить узел из C++
delete front;
Когда программа выполняет линию, она хочет выйти, потому что она не отвечает мне. Я попробовал
если (передний) удалить передний;
, но безрезультатно. Я попытался найти ответ на Google, но не получил удовлетворительных результатов. Это очень странно. Я занимаюсь ООП уже несколько лет, но это первый для меня. Вот мой код:
=============================== Queue.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";
}
========== ======================= Queue.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) Я установил только один узел очереди.
3) Я сделал все общедоступным в классе очереди, потому что я был в отчаянии в том, чтобы выяснить, в чем проблема. Пока я буду придерживаться этого.
4) Это мой первый вопрос, задающий вопрос о StackOverflow.com, поэтому, если я сделал что-то неправильно, то я все еще учился.
5) Я использую Visual C++ 2008 Express Edition.
Опять же, мой запрос: почему программа придумывает ошибку во время выполнения при удалении единственного узла в очереди?
Не думаю, что вам нужны эти 'cout' в 'dequeue()'. Если вы просто делаете это для тестирования, тогда все в порядке. – Jamal
Слишком много ошибок здесь! Альтернативой будет std :: list. –