指针改变它指向的地址的值

The pointer changes the value of the address it points to

我希望 pFirst 始终指向地址中的同一位置。然而,看起来 pFirstpCurrent 一起移动,即使该函数仅进入 Else 语句一次。

注意:代码正在创建链表。

void Push(T data) {
    ++_size;
    Data d = Data(data);
    if (_pCurrent != nullptr) _pCurrent->SetNext(&d);
    else _pFirst = &d;

    _pCurrent = &d;
}

d是在本地创建的,所以函数结束后就不存在了。调试错误有点奇怪,因为程序在同一个地址初始化了一个新元素,所以我没有立即明白到底发生了什么。

这是工作版本:

无效推送(const T 数据){

Data*d = new Data(data);
++_size;
if (_pCurrent != nullptr)
    _pCurrent->_pNext = d;
else
    _pFirst = d;
   _pCurrent = d;

}

数据应该是一个静态变量。代码应该是这样的:

Data d;
void UpdateData(Data newData) {
    //Do something on d using newData;
}

void Push(T data) {
        ++_size;
        UpdateData(data);
        if (_pCurrent != nullptr)
            _pCurrent->_pNext = d;
        else
            _pFirst = d;
           _pCurrent = d;
    }