分段错误(核心转储) 覆盖运算符时<<堆栈
Segmentation Fault (Core Dumped) When overriding operator<< for stack
我正在尝试覆盖运算符<lt;对于我的堆栈类来说,它可以打印所有项目,在这种情况下是印版,但我得到了一个分割错误。我不知道这意味着什么,也不知道如何修复。
ostream& operator << (ostream &out, Stack &stack){
int a = stack.getStackCount();
string outString = "";
PlateNode temp = PlateNode(stack.getTop().getPlate());
for(int i =0;i<a;i++){
outString = outString + ", " + temp.getPlate().getName();
temp = temp.getNextNode();
}
out << outString;
return out;
}
这就是我试图覆盖操作员的地方,我的主要内容是:
int main()
{
Stack nullStack = Stack();
nullStack.push(pNode);
nullStack.push("me");
cout <<"Reached c"<<endl;
cout<<nullStack;
}
在输入main中的最后一行之前,错误不存在。请帮忙!
编辑:这是我的全部代码,如果有帮助的话,很抱歉没有完全评论:
https://docs.google.com/document/d/16pg01muz0S5IMlXBahdL-JyVE5y7buzOVHYEOn_jyvE/edit?usp=sharing
问题就在这里:
class Stack
{
private:
PlateNode *ptrTop;
int stackCount;
public:
...
Stack(PlateNode top){
*ptrTop = top;
stackCount++;}
你正在取消引用一个未初始化的指针——试图将一些东西分配给一个基本上是随机的地址——这会导致一种叫做未定义行为的东西,这是一件坏事。你的意思可能是这样的:
ptrTop = top;
无论如何,你应该试着养成一个习惯,一小步一小步地开发新功能(例如新类),每一步都进行测试。如果你这样做了,你就会知道错误在于这种方法;即使你不能立刻发现它,你也会盯着三行而不是一百五十行。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- <<操作员在下面的行中工作
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 堆栈中大小变量输入错误 (C++)
- 堆栈问题(平衡表达式问题集)
- C++ 在堆栈中包含多态属性的类对象存储
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)