美好的一天,
我有一个示例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)。
我做错了什么?
答案 0 :(得分:4)
问题在于:
root = &node;
在此,您root
指向本地变量 node
。局部变量将超出范围并在函数返回后被破坏。
您需要动态分配节点。