C++ 指向结构的指针丢失值
C++ Pointer to a struct loses value
美好的一天,
我有一个示例 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
。局部变量,一旦函数返回,它将超出范围并被销毁。
您需要动态分配节点。
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- 指针或结构的矢量
- MSVC将仅移动结构参数解释为指针
- 如何访问指针结构的成员变量?
- 如何将变量从变量传递到指针结构对象
- 如何在函数中检索指针结构
- C :变量的点地址至指针结构成员的地址
- C++指针结构不会被删除
- 初始化指针结构 - 内存中的外观
- C++指针结构和多线程
- c++中指针结构的运算符重载
- 为什么我不能转发声明指针结构?
- C# 如何定义新的指针结构
- 如何处理大型指针结构
- 我怎么能写一个函数的定义在模板类中声明返回指针结构对象
- 我如何编程指针结构或类变量在c++
- 具有指针结构的类所需的析构函数
- 为什么在非指针结构上进行类型转换会出现语法错误
- 语法:做binary_search (STL)排序向量的指针结构
- /a.检测到Glibc.out: munmap_chunk():无效指针- c++结构体的动态数组