为什么从堆栈中弹出空向量?

时间:2016-02-21 20:49:04

标签: c++ vector struct stack pop

我有一堆结构。我把它们中的一些推送到我的代码中,当我弹出一个时,除了矢量成员之外的所有值都正确地弹出。当它不应该时,矢量变空。 (size = 0)see the image

我已将手表添加到堆叠中。当struct在堆栈中时,它的vector成员的size = 2,很好,但是一旦我弹出struct,vector成员就变空了。我哪里做错了?

我推到这里:

if ((*current).ways.size() > 1){
        p[(*current).number].ways_holder++;
        djikstra.push(p[(*current).number]);    //in case there are more than one way
}

然后点击此处:

else if ((*current).ways.size() == (*current).ways_holder){     //ordan bir yere gidemiyorsan current stacktekine eşitlensin
        if (djikstra.empty())
            break;
        current = &djikstra.top();
        djikstra.pop();
        cost_passer = (*current).cost_passer;
}

这些条件是在一个循环中。

1 个答案:

答案 0 :(得分:1)

我假设您的djikstra对象属于std::stack类型。我看到这里发生了不好的事情

current = &djikstra.top();
djikstra.pop();

在您的代码段中,current是一个指针,这就是您从&djikstra.top();分配它的原因...请记住,top()会返回对顶部元素的引用,并且下一行你做pop() ...

current现在持有无效指针。