-2
我有一堆結構。我將它們中的一些在代碼中的某個地方推入,當我彈出一個代碼時,除矢量成員正確彈出之外的所有值。當它不應該時,矢量會變空。 (size = 0)爲什麼從棧中彈出空載體?
我已經添加了手錶堆疊。當結構體處於堆棧中時,它的向量成員的大小= 2,很好,但是一旦我彈出結構體,向量成員變爲空。我在哪裏做錯了?
我推這裏:
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;
}
這些條件是在一個while循環。
請添加一個最小的,可驗證的完整示例來重現您的問題。 –
編寫'(* current).ways.size()'的通常方法是'current-> ways.size()'。 –
在我看來,你需要一個指向堆棧頂部元素的指針,然後彈出它。問題在於popping會刪除並銷燬堆棧頂部的元素,因此您的指針不再有效,現在解除引用會變成未定義的行爲。 –