我已经花了一段时间了,我似乎还不太明白为什么在执行时,一旦执行以下函数,然后在主调用中测试代码以查看堆栈是否为空,由于某种原因,它不是。我似乎无法找出确切的原因,尽管我感觉到它与“删除”功能没有删除最后一个节点有关,但是由于某种原因,我不知道如何解决它。
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可能被过早删除或其他原因,但是事实并非如此。
不幸的是,谷歌实际上也没有太多的信息。无论如何到目前为止。
这是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〜-〜-〜-
删除了对toDelete指针的malloc调用
〜-〜-〜-编辑2-〜-〜-〜
固定在pastebin上的代码。问题已解决。
答案 0 :(得分:0)
没关系,我只需要将public function addObjectResource($object)
{
if ($this->trackResources) {
// adds a bunch of stuff to ->classReflectors
// calls ->fileExists for class and its interfaces
// ultimatly the calling chain ends up adding stuff
// to the ->resources property
}
return $this;
}
移动到else块之外,然后完全删除else块。