分段故障(核心转储)当覆盖运算符<<对于堆栈

时间:2015-02-07 03:32:01

标签: c++ operator-overloading

我试图覆盖运算符<<我的堆栈类使它打印所有项目,在这种情况下板,但我收到分段错误。我不知道这意味着什么或如何解决它。

  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

1 个答案:

答案 0 :(得分:0)

问题在于:

class Stack
{
private:
  PlateNode *ptrTop;
  int stackCount;
public:
  ...    
  Stack(PlateNode top){
    *ptrTop = top;
    stackCount++;}

您正在取消引用未初始化的指针 - 尝试将某些内容分配给基本上是随机的地址 - 这会导致称为未定义行为的内容,这是一件坏事。你可能意味着这样的事情:

ptrTop = top;

无论如何,你应该尝试养成以小步骤开发新功能(例如新课程)的习惯,每一步都要进行测试。如果你这样做了,你就会知道这种方法存在错误;即使你没有能够立刻发现它,你也会盯着三条线而不是一百五十条。