头文件中的 C++ 链表正在重置内存存储
C++ Linked List from header file is resetting memory storage
所以我一直在通过头文件在 C++ 中处理链表。当我向其中插入值时,它工作正常,但是一旦我 return 到主 class 并尝试打印存储在节点内的值,它 return 是一个负数。这是到目前为止我的代码的摘录,我尽量保持简单。
这是包含链表代码的头文件。
#pragma once
#include <iostream>
using namespace std;
template <typename T>
class LinkedList {
public:
struct Node {
T data;
struct Node* next;
};
Node* head;
void AddHead(const T& addData) {
Node n;
n.data = addData;
n.next = head;
head = &n;
Print();
}
void Print() {
cout << head << " " << (*head).data << endl;
}
private:
};
这是来自 main 的引用。
LinkedList<int> l = LinkedList<int>();
int i = 5;
l.AddHead(i);
l.Print();
现在我认为这可以正常工作,但显然在添加节点、程序 return 从头文件中退出到再次打印之间发生了一些事情。我在里面放了第二个打印语句来显示差异。
目前的输出如下所示:
0000004F9A8FF7F8 5
0000004F9A8FF7F8 -1464607816
所以在同一个内存地址,里面存储的值发生了变化?我不知道自己做错了什么,感谢您的帮助。
void AddHead(const T& addData) {
Node n;
n.data = addData;
n.next = head;
head = &n;
Print();
}
一旦 AddHead 结束 n
被释放,它就是堆栈上的一个临时变量。您必须在堆上创建节点
void AddHead(const T& addData) {
Node *n = new Node();
n->data = addData;
n->next = head;
head = n;
Print();
}
下一个建议。不要使用裸指针,使用 std::shared_ptr 或 std::unique_ptr.
所以我一直在通过头文件在 C++ 中处理链表。当我向其中插入值时,它工作正常,但是一旦我 return 到主 class 并尝试打印存储在节点内的值,它 return 是一个负数。这是到目前为止我的代码的摘录,我尽量保持简单。
这是包含链表代码的头文件。
#pragma once
#include <iostream>
using namespace std;
template <typename T>
class LinkedList {
public:
struct Node {
T data;
struct Node* next;
};
Node* head;
void AddHead(const T& addData) {
Node n;
n.data = addData;
n.next = head;
head = &n;
Print();
}
void Print() {
cout << head << " " << (*head).data << endl;
}
private:
};
这是来自 main 的引用。
LinkedList<int> l = LinkedList<int>();
int i = 5;
l.AddHead(i);
l.Print();
现在我认为这可以正常工作,但显然在添加节点、程序 return 从头文件中退出到再次打印之间发生了一些事情。我在里面放了第二个打印语句来显示差异。
目前的输出如下所示:
0000004F9A8FF7F8 5
0000004F9A8FF7F8 -1464607816
所以在同一个内存地址,里面存储的值发生了变化?我不知道自己做错了什么,感谢您的帮助。
void AddHead(const T& addData) {
Node n;
n.data = addData;
n.next = head;
head = &n;
Print();
}
一旦 AddHead 结束 n
被释放,它就是堆栈上的一个临时变量。您必须在堆上创建节点
void AddHead(const T& addData) {
Node *n = new Node();
n->data = addData;
n->next = head;
head = n;
Print();
}
下一个建议。不要使用裸指针,使用 std::shared_ptr 或 std::unique_ptr.