【发布时间】:2021-12-29 09:20:57
【问题描述】:
我希望pFirst 总是指向地址中的同一个地方。然而,看起来pFirst 与pCurrent 一起移动,即使该函数只进入了 Else 语句一次。
注意:代码正在创建一个链表。
void Push(T data) {
++_size;
Data d = Data(data);
if (_pCurrent != nullptr) _pCurrent->SetNext(&d);
else _pFirst = &d;
_pCurrent = &d;
}
【问题讨论】:
-
指针
&d在函数返回后无效,因为它指向一个局部变量。 -
是的,d是本地创建的,所以函数结束后就不存在了,调试错误有点奇怪,因为程序在同一个地址初始化了一个新元素所以我没有立即理解到底发生了什么。
-
是的,d是在本地创建的,所以函数结束后就不存在了 -- 你在发布问题之前是否理解这一点,或者刚刚在@评论之后interjay 制作完成了吗?
-
我同时意识到(当我在调试中发表评论时)。这在调试器中相当混乱,因为它在同一地址初始化对象。
-
在任何一种情况下,您都必须删除
&d的使用,因为函数结束后指针无效。
标签: c++ pointers linked-list