堆栈列表调试断言失败c ++

时间:2015-10-10 03:40:09

标签: c++ list stack

当我尝试运行我的代码时,它显示我的调试断言失败。任何人都可以帮助我,我正在做堆栈列表,在头文件中,我创建一个struct有三个变量,string * s,int numoflength, stackFrame * next

class Stack
{
public:
    Stack();
    //Default Constructor used to create an empty Stack object.

    ~Stack();
    //Destructor for Stack objects.

    void push(string& str);

    string pop();

    bool empty();
    //Checks to see if the Stack is empty.  Returns true if empty, else returns false.
    //Stack remains unchanged after function call.


    friend ostream &operator<<(ostream & out_stream, Stack & mystack);

    friend istream &operator>>(istream & in_stream, Stack & mystack);

private:
    StackFramePtr top; // Points to the top of the stack;

};
ostream &operator<<(ostream & outs, Stack & sta)
{
    if(sta.empty())
        exit(1);
    else
    {
        StackFramePtr read;
        read=sta.top;
        while(read!=NULL)
        {
            outs<<"string = "<<read->str[0]<<endl;
            outs<<" number of charcter is" <<read->num_char;
            read=read->next;
            outs<<endl<<endl;
        }
    }
    return outs;
}

当我尝试运行这个主要功能时,它给我调试失败,任何人都可以帮助我?非常感谢

math.h

1 个答案:

答案 0 :(得分:1)

push中,您分配了一个string数组,并将其分配给str的{​​{1}}成员。在Stack中,您将pop复制到str,然后{我将假设的name将删除名称正在指向的数组。最后,您取消引用此悬空指针并访问已释放的内存。

要解决此问题,请将delete temp声明为name,而不是指向字符串的指针,然后设置stringname=*top->str