Я работаю над использованием указателей для добавления объектов в очередь и сталкивался с странной поведенческой проблемой, которую я не могу понять.C++ Неизменяемый указатель, изменяющийся после вызова функции
Каждый объект, который добавляется в очередь, имеет указатель «next», который связывает их все вместе, и у меня есть указатель «start» и «end», чтобы отслеживать, где находятся каждый конец очереди.
Проблема заключается в том, что когда я передаю конечный указатель и объект (который хранится в pArray по его идентификатору processID), он также меняет указатель начала - хотя я не передаю его функции.
// 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;
};
Я сузили к функции, и что на самом деле пни меня, что я переместить эти две строки кода, чтобы мой главный, он работает и ведет себя просто хорошо. Это когда я добавляю функцию, которой нет. Я думаю, что это связано с тем, как я имею дело с указателями и разыменованием, но я мог бы использовать некоторую помощь, чтобы понять это. Благодаря!
EDIT:
Чтобы подчеркнуть, что я не возникли проблемы с переменными не изменяется в функции, так как кто-то что этот дубликат вопрос для. Проблема заключается в том, что после вызова функции она меняет RQStart (которая не передается функции).
Если я не использую функцию, RQStart останется неизменным, когда я использую эту функцию, RQStart изменяет на другой объект.
Странная поведенческая проблема - это то, что я вижу много на переполнении стека. – SergeyA
'return * endRQ;' возвращает копию 'endRQ', это, вероятно, не то, что вы хотите. –
Вам необходимо опубликовать [** Минимальный законченный ** Подтверждаемый пример] (http://stackoverflow.com/help/mcve). На самом деле, в процессе разработки MCVE, я ожидаю, что вы сами найдете проблему. – user3386109