当我在调用append后立即实例化Node时,链表会损坏
Linked list gets corrupted when I instantiate a Node immediately after calling append
我想知道在下面的代码(注释掉的行)中我可能误解了什么。如果我尝试在遍历链表之前创建Node,那么从root->开始的值将从第二次迭代开始混乱。
代码现在的方式可以工作,但我不明白为什么另一种方式不行。
template <class T>
class Node
{
public:
T data;
Node* next;
Node(T nodeData) : data(nodeData) { next = nullptr; }
void append(T nodeData)
{
// If I uncomment this, I get the problem
//Node newNode (nodeData);
Node* insertionNode = this;
while(insertionNode->next != nullptr)
{
insertionNode = insertionNode->next;
}
// Instead of using newNode, I must create the node here
// insertionNode->next = &newNode;
insertionNode->next = new Node(nodeData);
}
};
int main()
{
int testList[] = {1,2,3,4,5};
Node<int> rootNode(0);
for(int i = 0; i < 5; i++)
{
rootNode.append(testList[i]);
}
return 0;
}
您正在堆栈上创建newNode
。在append
完成后,它将不再存在。通过说new Node(nodeData);
,你实际上是把它放在堆上,这让你可以控制对象的生命周期。
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 使用std::list创建循环链表
- 链表的泛型函数remove()与成员函数remove)
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我们可以删除链表中静态内存中的节点吗
- C++,指针数组,指向双链表中的条目
- 链表中写入访问冲突的未知原因
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 打印所有链表的元素 (C++)
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 链表(从 'Node<int>*' 到 'int' 的转换无效 [-fallowive]|)
- 在链表中删除该节点时,Node* 接下来会发生什么情况
- 'Node'不命名类型链表
- 将链表的头部传递给函数时。为什么我们需要通过引用来传递它,例如在 push(node* &head, int key)
- 当我在调用append后立即实例化Node时,链表会损坏
- 在链表中设置head等于Node* ptr意味着什么?