[英]std::vector Assertion failed (vector iterators incompatible)
我有这个结构:
struct MxMInstanceData
{
D3DXVECTOR2 mTransform;
float mSpacing;
};
然后我创建一个 MxMInstanceData 向量:
std::vector<MxMInstanceData> instInFrustumData;
如果我调用instInFrustumData.clear()
我得到这个错误:
断言失败(向量迭代器不兼容)
矢量创建代码:
instInFrustumData.reserve(mNumInstances);
矢量更新代码:
void Terrain::updateInstances()
{
mNumInstancesInFrustum = 0;
if(instInFrustumData.size() != 0)
instInFrustumData.clear();
mpMxMInstInFrustumB->Map(D3D10_MAP_WRITE_DISCARD, NULL, (void**) &instInFrustumData);
for(int x = 0; x < mNumInstances; x++)
{
if(mpCamera->point2DInFrustum(instData[x].mTransform +
D3DXVECTOR2(instData[x].mSpacing/2 + mpCamera->getPosition().x, instData[x].mSpacing/2 + mpCamera->getPosition().z), instData[x].mSpacing/2)
!= OUTSIDE)
{
instInFrustumData.push_back(instData[x]);
mNumInstancesInFrustum++;
}
}
mpMxMInstInFrustumB->Unmap();
}
什么能让这发生?
在我的 class 的析构函数中,我还调用 clear()
有点猜测,但也许你的问题是这一行:
mpMxMInstInFrustumB->Map(D3D10_MAP_WRITE_DISCARD, NULL, (void**) &instInFrustumData);
你将一个指向向量本身的指针传递给这个 Map function,我猜这可能会覆盖它的一些内部结构? 我没有它的文档,但它看起来不像 function 期望指向向量的指针:)
您可能想查看有关使用std::vector
的参考,例如http://www.cplusplus.com/reference/stl/vector/或购买一本好的 STL 书。 您正在以我认为非正统的方式使用一些方法。
empty()
检查向量是否有元素(如果不为空,则清除更好)(void**) &instInFrustumData
是一个非常糟糕的主意) 您有这么多成员变量,其定义未知以及未知方法Map()
和UnMap()
并且仍然没有显示任何使用与原始错误相关的迭代器的代码。 我猜你对instData[x]
的使用是危险的和有问题的,以及循环的一般构造方式。 您也真的不想将 STL 容器视为 STL 容器。 应该避免像(void**) &instInFrustumData
这样的事情,因为它们只会导致问题。
我强烈建议您先学习 C++,然后再处理 DirectX 或两者编写的图形和游戏引擎。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.