【发布时间】:2016-06-09 15:41:02
【问题描述】:
我对 c++ 比较陌生,对一些奇怪的行为感到困惑。我得到一个包含 std::vector 的对象。然后,我通过完全相同的复制行打印出它的大小两次:
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 应用程序,可能是相关的。
【问题讨论】:
-
"这里发生了什么,我该如何解决这个问题?"你的截图没有问题,你的问题在别的地方。
-
getCurrentPose()返回什么?可能超出范围或被破坏的东西? -
Pose& pose = getCurrentPose();很可能返回一个对不再有效的对象的引用。 -
其他线程还有进程吗?
-
嗯...什么编译器允许这样做 -
Pose& accu;?