C ++指向结构的指针失去价值

时间:2017-05-18 18:42:53

标签: c++ pointers linked-list

美好的一天,

我有一个示例LinkedList,这是我学习C ++的一个非常基础的类。 目前我正在尝试使用类等将新节点添加到我的链接列表中,我遇到了一个非常奇怪的错误。

这是我的LinkedList.h:

struct Node {

    Node* next;
    int value;
};

class LinkedList {
private:
    Node* root;
public:
    LinkedList();
    void print();
    void add(int val);
    ~LinkedList();
};

这是我的LinkedList.cpp

#include "LinkedList.h"
#include <iostream>

using namespace std;

LinkedList::LinkedList() {
    root = NULL;
}

LinkedList::~LinkedList() {

}

void LinkedList::add(int val) {
   Node node;
   node.next = NULL;
   node.value = val;
   if (root != NULL)
      node.next = root;
   root = &node;
   cout << root->value << endl; // TEST PRINT 1
}

void LinkedList::print() {
    cout << root->value <<endl; // TEST PRINT 2
}

这是我的main.cpp:

#include "LinkedList.h"
#include <iostream>

using namespace std;

int main() {

    LinkedList list;

    list.add(5);
    list.print();


}

此代码应该只创建一个值为&#39; 5&#39;的新节点。并使其成为根。当我添加一个新号码时,应该创建一个不同的节点,并且这个新节点应该是根目录,其根目录为&#39; next&#39;节点

我有两条调试信息,位于“TEST PRINT 1&#39;附近”。和&#39;测试打印2&#39;。两条线都完全相同,但第一次打印给了我正确的值(即5),而第二次打印给了我一个非常奇怪的负数(-858993460)。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

问题在于:

root = &node;

在此,您root指向本地变量 node。局部变量将超出范围并在函数返回后被破坏。

您需要动态分配节点。