C++ 在 for 循环中访问违规写入位置

C++ Access violation writing location in for loop

本文关键字:位置 访问 for 循环 C++      更新时间:2023-10-16

我试图使边界框工作,以便在我的引擎中实现视锥剔除。但是,一旦我运行解决方案,边界框的转换函数中就会出现访问冲突运行时错误。

void BoundingBox::Transform(D3DXVECTOR3 pos, D3DXVECTOR3 rot, D3DXVECTOR3 sca) {
D3DXQUATERNION rotationQuaternion;
D3DXMatrixTransformation(&mat, NULL, NULL, &sca, NULL, 
D3DXQuaternionRotationYawPitchRoll(&rotationQuaternion, 
D3DXToRadian(rot.x), D3DXToRadian(rot.y), D3DXToRadian(rot.z)), &pos);
for (int k = 0; k < 8; k++)
{
D3DXVec3Transform(&transVertex[k], &vertexes[k], &mat);
/*this->*/xMin = min(transVertex->x, /*this->*/xMin);
/*this->*/yMin = min(transVertex->y, /*this->*/yMin);
/*this->*/zMin = min(transVertex->z, /*this->*/zMin);
/*this->*/xMax = max(transVertex->x, /*this->*/xMax);
/*this->*/yMax = max(transVertex->y, /*this->*/yMax);
/*this->*/zMax = max(transVertex->z, /*this->*/zMax);
}}

有人知道为什么会这样吗?

以下是错误的内容:"在 bushRanger.exe 中向0x0F5E20E6 (D3DX9_43.dll( 抛出异常: 0xC0000005:访问违规写入位置0x00000038。

我发现了发生了什么,相机制作了视锥体,但它没有边界框,它仍然使用与其他合成相同的 Move(( 函数。

void Composite::Move(D3DXVECTOR3 trasl, D3DXVECTOR3 escal, D3DXVECTOR3 rot) 
{
Component::Move(trasl, escal, rot);
/*D3DXMATRIX rotMat = rotXMat * rotYMat * rotZMat;
thyMatrix = scaMat * rotMat * transMat;*/
D3DXQUATERNION rotationQuaternion;
D3DXMatrixTransformation(&thyMatrix, NULL, NULL, &escal, NULL, D3DXQuaternionRotationYawPitchRoll(&rotationQuaternion, D3DXToRadian(rot.x), D3DXToRadian(rot.y), D3DXToRadian(rot.z)), &trasl);
laCajita->Transform(_trasl, _escal, _rot); // and here is a non existant bounding box
UpdateBoundingBox();
}

在这里,当它触摸摄像机的移动函数时,摄像机是一个复合体,它调用了一个不存在的边界框。

好吧,人们,感谢您在评论中的帮助,从现在开始,在发布问题之前,我会更加关注 debbugger。