Имам тази структура:
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();
}
Какво може да накара това да се случи?
И в деструктора на моя клас също извиквам clear()
reserve
, за да резервирате капацитет във вектор, без да създавате елементи.resize
ще премахне елементи или ще разшири вектора и евентуално ще създаде нови празни елементи в зависимост от текущия размер и присъстващите елементи при извикването му. - person AJG85   schedule 28.04.2011