Я некоторое время крутился над этим, и я не могу понять, почему при выполнении, когда однажды выполняется следующая функция и тестовый код в основных вызовах, чтобы увидеть, пуст ли стек по какой-то причине это не так. Я не могу понять точную причину, хотя у меня есть ощущение, что это как-то связано с функцией «удалить», не удаляющей последний узел, но по какой-то причине я не могу понять, как это исправить.
TYPE listStackPop (struct Stack* stack)
{
/* FIXME: You will write this function */
assert (stack != NULL);
assert (!listQueueIsEmpty (stack->q1));
return listQueueRemoveFront (stack->q1);
}
---later calls to listQueueRemoveFront---
TYPE listQueueRemoveFront (struct Queue* queue)
{
/* FIXME: You will write this function */
assert (queue != 0);
assert (!listQueueIsEmpty (queue));
struct Link* toDelete;
toDelete = queue->head->next;
if (toDelete == queue->tail) {
queue->tail = queue->head;
}
else {
queue->head->next = toDelete->next;
}
int retVal = toDelete->value;
return retVal;
}
--For clarity, TYPE is defined as int--
Я пытался перейти от простого return toDelete->value
к копированию значения toDelete в int и передать это int для возврата, как я думал, может быть toDelete был удален преждевременно или что-то в этом роде, но это не так.
К сожалению, Google на самом деле не так много информации об этом. Так или иначе, пока.
Вот полный код на pastebin, если кому-то интересно прочитать его полностью: https://pastebin.com/cDvdHmTu
Я ожидал, что он пройдет, но по какой-то причине он не прошел, хотя все остальные тесты прошли.
Результаты:
-------------------------------------------------
---- Testing stack from queue implementation ----
-------------------------------------------------
stack init...
stackIsEmpty == 1: PASSED
pushing 4, 5, -300...
stackIsEmpty == 0: PASSED
popping; val == -300: PASSED
popping; val == 5: PASSED
top val == 4 : PASSED
popping; val == 4: PASSED
stackIsEmpty == 1: FAILED
pushing 0-9...
top val == 9 : PASSED
C:\Users\Zedri\source\repos\Stack From Queues\Debug\Stack From Queues.exe (process 8928) exited with code 0.
Press any key to close this window . . .
Используемый компилятор / IDE: Visual Studio 2019
- ~ - ~ - ~ Редактировать 1 ~ - ~ - ~ -
удален вызов malloc для указателя toDelete
~ - ~ - ~ -Edit 2- ~ - ~ - ~
Исправлен код на pastebin. Проблема решена.