내 쿼리 : 대기열에서 대기중인 유일한 노드를 대기열에서 풀 때 (실제로는 삭제 중일 때) 내 프로그램에서 런타임 오류가 발생하는 이유는 무엇입니까? 적절한 함수에 디버깅 문을 작성했습니다.이 함수는 행에 문제가 있음을 나타냅니다.C++에서 노드를 dequeue 할 수 없습니다.
delete front;
프로그램이 줄을 실행할 때 응답하지 않기 때문에 종료하려고합니다. 시도했습니다
(앞면) 삭제 앞면;
그러나 아무 소용이 없습니다. Google에서 답변을 찾으려고했지만 만족스러운 결과를 얻지 못했습니다. 이것은 매우 이상합니다. 나는 몇 년 동안 OOP를 다루었지만 그게 내가 처음이다. 여기 내 코드는 다음과 같습니다.
===================== 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을 사용하고 있습니다.
또 다시 쿼리 : 큐에서 유일한 노드를 삭제할 때 프로그램에서 런타임 오류가 발생하는 이유는 무엇입니까?
나는'dequeue()'에서'cout'을 필요로하지 않는다고 생각합니다. 테스트 목적으로 그 일을하고 있다면 괜찮습니다. – Jamal
너무 많은 버그가 있습니다! std :: list가 대안이 될 수 있습니다. –