堆栈上的C ++访问冲突写入异常

时间:2018-09-18 10:26:13

标签: c++ visual-studio-2017

我尝试使用控制台输入在C ++中对UPN计算器进行编程。 因此,我编写了一个节点和一个堆栈类,并在主类中使用它。开始时一切顺利,直到我开始将内容推入堆栈。然后,我得到一个“访问冲突写入异常”,并且不真正了解问题所在。

#include "pch.h"
#include "Node.h"


Node::Node(int value){this->value = value;}

int Node::GetValue(){return this->value;}

Node * Node::GetNode(){return this;}

Node* Node::GetNextNode(){return this->next_node;}

bool Node::SetNextNode(Node n)
{
        this->next_node = &n;
        return true;

}

Node * Node::GetBeforeNode(){return this->before_node;}

bool Node::SetBeforeNode(Node n)
{
        this->before_node = &n; // <---- the error occures here
        return true;
}

1 个答案:

答案 0 :(得分:0)

请勿创建指向具有局部作用域的变量的指针。

您的Node n按值传递给SetBeforeNode,因此它被复制,取其地址,但是n超出范围,而是停留在悬空的指针上,因此不是:

bool Node::SetBeforeNode(Node n)

应该是:

bool Node::SetBeforeNode(const Node& n)