【发布时间】:2015-05-25 17:53:36
【问题描述】:
这是一个带有我的 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。
那么,你们能帮我找出错误吗?我一遍又一遍地查看我的代码,但我没有找到异常的原因。
【问题讨论】:
-
你没有提到哪一行抛出了异常。
-
@user2079303
return topElement->element;在我的 top() 方法中 -
您应该将该信息添加到问题中。
-
错误消息清楚地表明您正在取消引用空指针。逐行、逐个操作地检查您的代码,并确定它与您在开始之前写在纸上的算法的不同之处。
-
是的,真的。感谢关注