实现队列类,分段错误
Implementing a Queue Class, Segmentation Fault?
我试图实现队列类(使用节点结构和队列类)。我有一个分割错误,我的眼睛失败了,我似乎找不到它。我的pushBack
不能工作,我很确定popFront
可能也不能工作。我只是希望有人能在正确的方向上给我一个好的推动!
同样,如果你还没能弄清楚。我对 c++ 还是个新手。
#include <iostream>
using namespace std;
struct Node {
int data;
Node* link;
};
class Queue {
public:
Queue();
~Queue();
void pushBack(int d);
bool popFront();
bool isEmpty();
void displayQueue();
private:
Node* back;
Node* front;
};
Queue::Queue() {
back = NULL;
front = NULL;
}
Queue::~Queue() {
while (!isEmpty()) {
popFront();
}
}
void Queue::pushBack(int d) {
Node* temp;
if (temp == NULL) {
return;
} else {
temp->link = NULL;
if (back == NULL) {
back = temp;
front = temp;
} else {
front->link = temp;
front = temp;
}
}
}
bool Queue::popFront() {
if (front == NULL) {
return false;
} else {
Node* removeNode;
removeNode = front;
if (back == front) {
back = NULL;
front = NULL;
} else {
Node* previousFront = back;
while (previousFront->link != front) {
previousFront = previousFront->link;
}
front = previousFront;
front->link = NULL;
}
delete removeNode;
return true;
}
}
bool Queue::isEmpty() {
return (back == NULL);
}
void Queue::displayQueue() {
if (isEmpty()) {
cout << "Queue is empty!" << endl;
} else {
Node *current;
current = back;
cout << endl << "-- BACK -- ";
while (current != NULL) {
cout << current->data << " ";
current = current->link;
}
cout << "-- FRONT --" << endl << endl;
}
}
int main(){
Queue q;
q.displayQueue();
q.pushBack(20);
q.pushBack(30);
q.displayQueue();
q.pushBack(40);
q.pushBack(12);
q.displayQueue();
q.popFront();
q.displayQueue();
return 0;
}
至少有一个主要问题,在pushBack
中,您使用temp
而没有初始化它:
void Queue::pushBack(int d)
{
Node* temp;
if (temp == NULL) {
^^^^
在打开警告的情况下编译会对您有所帮助,使用-Wall
标志和gcc
会给您以下警告:
warning: 'temp' is used uninitialized in this function [-Wuninitialized]
if (temp == NULL) {
^
像这样使用一个未初始化的自动变量是未定义的行为,这意味着你的程序的行为是不可预测的。另请参阅c++标准在c++ 1y中使用不确定值和未定义行为方面有变化吗?供参考。
你可能想要做的是这样的事情:
Node* temp = new Node();
temp->data = d ;
虽然为Node
设置constructor
会更好。
不能这样设置变量:temp->link = NULL;
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?