我對C++比較陌生,並且被一些奇怪的行爲困惑。我得到一個包含std :: vector的對象。然後,我打印出它的兩倍大小,由完全一樣的複製行:C++ std :: vector :: size()更改其狀態
Pose& pose = getCurrentPose();
std::cout << "nr1: " << pose.transforms.size() << " bones." << std::endl;
std::cout << "nr2: " << pose.transforms.size() << " bones." << std::endl;
結果:
Nr1: 17 bones.
Nr2: 38294074 bones.
任何進一步調用該向量的大小返回相同數量巨大(17應該是正確的)。
我在迭代矢量時也會出錯。在我看來,它實際上沒有調整大小,但某種類型的結束指針已被損壞。這裏發生了什麼,我該如何解決這個問題?
這裏是getCurrentPose大致模樣:
Pose& getCurrentPose() {
Pose& accu;
for (int b = 0; b < p.transforms.size(); b++) {
BoneState bs;
accu->transforms.push_back(bs);
}
for (int b = 0; b < p.transforms.size(); b++) {
accu->transforms.at(b).loc += getLoc(b);
accu->transforms.at(b).rot += getRot(b);
accu->transforms.at(b).scale += getScale(b);
}
return accu;
}
我也沒有多線程任何地方,據我所知。這是一個OpenGL應用程序,它可能是相關的。
「這裏發生了什麼,我該如何解決這個問題?」你的問題沒有錯,你的問題在別的地方。 – tkausl
getCurrentPose()返回什麼?有什麼東西可以超出範圍,或被摧毀? –
'Pose&pose = getCurrentPose()'最有可能返回一個對無效的對象的引用。 –