弹出堆栈无法正常工作吗? (来自两个队列的堆栈)

时间:2019-05-08 19:58:17

标签: c

我已经花了一段时间了,我似乎还不太明白为什么在执行时,一旦执行以下函数,然后在主调用中测试代码以查看堆栈是否为空,由于某种原因,它不是。我似乎无法找出确切的原因,尽管我感觉到它与“删除”功能没有删除最后一个节点有关,但是由于某种原因,我不知道如何解决它。

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上的代码。问题已解决。

1 个答案:

答案 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块。