这是我的Stack类程序:
#include <iostream>
using namespace std;
template <class T>
struct Node{
T element;
Node<T> *prevElement;
};
template <class T>
class Stack {
private:
unsigned int NumberOfElements;
Node<T> *tempAdr;
Node<T> *topElement;
public:
Stack(){
topElement = new Node<T>;
topElement->prevElement = nullptr;
NumberOfElements = 0;
}
~Stack(){
delete topElement;
}
void push(T input_element){
tempAdr = topElement->prevElement;
topElement = new Node<T>;
topElement->element = input_element;
topElement->prevElement = tempAdr;
NumberOfElements++;
}
void pop(){
tempAdr = topElement->prevElement;
delete topElement;
topElement = tempAdr;
NumberOfElements--;
}
T top(){
return topElement->element;
}
unsigned int size(){
return NumberOfElements;
}
};
int main(){
Stack<int> MyStack;
MyStack.push(17);
MyStack.push(18);
MyStack.pop();
cout << MyStack.top()<<" "<<MyStack.size();
system("pause");
return 0;
}
预期输出
17 1
但是当我运行代码时,我收到错误消息:
LB_4_RealStack.exe中0x00EE5FA9处的未处理异常:0xC0000005: 访问冲突读取位置0x00000000。
那么,你们能帮助我找到错误吗?我一遍又一遍地查看我的代码,但我没有找到异常的原因。
答案 0 :(得分:0)
我认为错误发生在你的push()方法中,即第一条指令。
实际上你在代码中获得的是在顶部的下一个元素之上添加元素(忽略当前的顶部),所以如果你重写方法如下:
void push(T input_element){
tempAdr = topElement;
topElement = new Node<T>;
topElement->element = input_element;
topElement->prevElement = tempAdr;
NumberOfElements++;
}
它应该有用。