C++ 指向结构的指针丢失值

C++ Pointer to a struct loses value

本文关键字:指针 结构 C++      更新时间:2023-10-16

美好的一天,

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

这是我的LinkedList.h:

struct Node {
    Node* next;
    int value;
};
class LinkedList {
private:
    Node* root;
public:
    LinkedList();
    void print();
    void add(int val);
    ~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
}

这是我的主要.cpp:

#include "LinkedList.h"
#include <iostream>
using namespace std;
int main() {
    LinkedList list;
    list.add(5);
    list.print();

}

此代码应该简单地创建一个值为"5"的新节点,并使其成为根。当我添加一个新数字时,应该创建一个不同的节点,这个新节点应该是根,旧根作为其"下一个"节点。

我有两个调试消息,位于"测试打印 1"和"测试打印 2"附近。两行完全相同,但第一次打印给了我正确的值(即 5(,而第二次打印给了我一个非常奇怪的负数 (-858993460(。

我做错了什么?

问题就在这里:

root = &node;

在这里,您root指向局部变量node。局部变量,一旦函数返回,它将超出范围并被销毁。

您需要动态分配节点。