分段错误(核心转储) 覆盖运算符时<<堆栈

Segmentation Fault (Core Dumped) When overriding operator<< for stack

本文关键字:lt 堆栈 运算符 覆盖 错误 核心 转储 分段      更新时间:2023-10-16

我正在尝试覆盖运算符<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;

无论如何,你应该试着养成一个习惯,一小步一小步地开发新功能(例如新类),每一步都进行测试。如果你这样做了,你就会知道错误在于这种方法;即使你不能立刻发现它,你也会盯着三行而不是一百五十行。