gpt4 book ai didi

c++ - 实现队列类,段错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:51 24 4
gpt4 key购买 nike

我正在尝试实现一个队列类(使用节点结构和队列类)。我遇到了一个段错误,我的眼睛看不清了,我似乎找不到它。我的 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) {
^

使用像这样的未初始化自动变量的变量是undeined behavior这意味着您的程序的行为是不可预测的。另见 Has C++ standard changed with respect to the use of indeterminate values and undefined behavior in C++1y?供引用。

你可能想做的是这样的:

   Node* temp = new Node();

temp->data = d ;

虽然为 Node 设置一个 constructor 会更好。

关于c++ - 实现队列类,段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com