当我尝试运行我的代码时,它显示我的调试断言失败。任何人都可以帮助我,我正在做堆栈列表,在头文件中,我创建一个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
答案 0 :(得分:1)
在push
中,您分配了一个string
数组,并将其分配给str
的{{1}}成员。在Stack
中,您将pop
复制到str
,然后{我将假设的name
将删除名称正在指向的数组。最后,您取消引用此悬空指针并访问已释放的内存。
要解决此问题,请将delete temp
声明为name
,而不是指向字符串的指针,然后设置string
或name=*top->str
。