我有一堆结构。我把它们中的一些推送到我的代码中,当我弹出一个时,除了矢量成员之外的所有值都正确地弹出。当它不应该时,矢量变空。 (size = 0)
我已将手表添加到堆叠中。当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;
}
这些条件是在一个循环中。
答案 0 :(得分:1)
我假设您的djikstra
对象属于std::stack
类型。我看到这里发生了不好的事情
current = &djikstra.top();
djikstra.pop();
在您的代码段中,current
是一个指针,这就是您从&djikstra.top();
分配它的原因...请记住,top()
会返回对顶部元素的引用,并且下一行你做pop()
...
current
现在持有无效指针。