C++ C++;函数调用后不相关的指针更改
我正在使用指针将对象添加到队列中,遇到了一个奇怪的行为问题,我不太清楚 添加到队列中的每个对象都有一个“下一个”指针将它们链接在一起,我有一个“开始”和“结束”指针来跟踪队列的每一端 我遇到的问题是,当我传递结束指针和对象(通过其processID存储在pArray中)时,它也会更改开始指针——即使我没有将其传递给函数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
// 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会更改为不同的对象。”这是一个强烈的迹象,表明您在代码中遇到了未定义的行为。除非你发布了一篇文章,否则我们实际上无法判断问题出在哪里。