C++ C++;函数调用后不相关的指针更改

C++ C++;函数调用后不相关的指针更改,c++,c,function,pointers,memory,C++,C,Function,Pointers,Memory,我正在使用指针将对象添加到队列中,遇到了一个奇怪的行为问题,我不太清楚 添加到队列中的每个对象都有一个“下一个”指针将它们链接在一起,我有一个“开始”和“结束”指针来跟踪队列的每一端 我遇到的问题是,当我传递结束指针和对象(通过其processID存储在pArray中)时,它也会更改开始指针——即使我没有将其传递给函数 // snippet from my main.cpp RQCount = 0; if (RQCount == 0) { RQStart = &p

我正在使用指针将对象添加到队列中,遇到了一个奇怪的行为问题,我不太清楚

添加到队列中的每个对象都有一个“下一个”指针将它们链接在一起,我有一个“开始”和“结束”指针来跟踪队列的每一端

我遇到的问题是,当我传递结束指针和对象(通过其processID存储在pArray中)时,它也会更改开始指针——即使我没有将其传递给函数

// snippet from my main.cpp
RQCount = 0;
if (RQCount == 0)
    {
        RQStart = &pArray[processID];
        RQStart -> next = &pArray[processID];
        endRQ = &pArray[processID];
        pArray[processID].setStatus("Ready");

        CPUHolder = RQStart;
        CPU = RQStart -> CPUBurst;

        RQStart ->pStatus = "Executing";
    }
    else
    {
        *endRQ = FCFS(endRQ, &pArray[processID]);
        pArray[processID].setStatus("Ready")
    }
RQCount++;
FCSC方法:

PCB FCFS (PCB *endRQ, PCB *obj)
{
    endRQ -> next = obj;
    endRQ = obj;

    return *endRQ;
};
我把范围缩小到函数,真正让我感到困惑的是,我把这两行代码移到了main中,它运行和行为都很好。当我添加函数时,它不会。我认为这与我如何处理指针和去引用有关,但我需要一些帮助来理解这一点。谢谢

编辑:

要强调的是,我没有在函数中变量不改变的问题,因为有人将这标记为一个重复的问题。问题在于调用函数后,它会更改RQStart(它不会传递给函数)

如果我不使用某个函数,RQStart将保持不变,当我使用该函数时,RQStart将更改为另一个对象。

    RQStart = &pArray[processID];
    // ...
    endRQ = &pArray[processID];
然后将
endRQ
传递给函数,这将与传递
RQStart
相同

因此,当您更改
endRQ->next
时,也将更改
RQStart->next


这是标准容器的
end()
点一超过最后一个元素而不是最后一个元素的原因之一。

奇怪的行为问题是我在堆栈溢出上看到的很多问题。
return*endRQ
返回
endRQ
的副本,这可能不是您想要的。您需要发布一个。事实上,在开发MCVE的过程中,我希望您自己会发现问题。“如果我不使用函数,RQStart保持不变,当我使用函数时,RQStart会更改为不同的对象。”这是一个强烈的迹象,表明您在代码中遇到了未定义的行为。除非你发布了一篇文章,否则我们实际上无法判断问题出在哪里。