我对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()'最有可能返回一个对无效的对象的引用。 –