D3DXMATRIX ColladaFileLoader::processMatrix(daeElement* node)
{
D3DXMATRIX matWorld;
daeTArray<daeElementRef> nodeChildren = node->getChildren();
for (int i = 0; i < nodeChildren.getCount(); i++)
{
string type = nodeChildren[i]->getAttribute("sid");
if (type == "rotationX")
{
string data = nodeChildren[i]->getCharData();
stringstream stm(data);
stm >> matWorld.m[0][0];
stm >> matWorld.m[0][1];
stm >> matWorld.m[0][2];
stm >> matWorld.m[0][3];
}
if (type == "rotationY")
{
string data = nodeChildren[i]->getCharData();
stringstream stm(data);
stm >> matWorld.m[1][0];
stm >> matWorld.m[1][1];
stm >> matWorld.m[1][2];
stm >> matWorld.m[1][3];
}
if (type == "rotationZ")
{
string data = nodeChildren[i]->getCharData();
stringstream stm(data);
stm >> matWorld.m[2][0];
stm >> matWorld.m[2][1];
stm >> matWorld.m[2][2];
stm >> matWorld.m[2][3];
}
if (type == "location")
{
string data = nodeChildren[i]->getCharData();
stringstream stm(data);
stm >> matWorld.m[3][0];
stm >> matWorld.m[3][1];
stm >> matWorld.m[3][2];
matWorld.m[3][3] = 1;
}
}
return matWorld;
}
此函数将在第一次通过循环后运行调试断言失败。循环将正确运行,它将进入最后一个if语句并正确设置所有值。但是当传递完成并且在它开始下一次传递之前,它将调试断言失败。我认为它试图销毁字符串类型变量,但当它试图删除它时会出现问题。我不知道问题是什么。它似乎在我的程序的其他部分执行此操作,从文件中获取字符串并放在std :: string中。我通过完全删除它们来修复它们,但是这个不能被删除它需要存在。
不知道这是否与它有关,但我正在使用visual studio 11 dev预览版,并使用编译器vs100(vs10的编译器)设置。
dbgheap.c 行:1322
表达式:_CrtISValidHeapPointer(pUserData)
当我使用调试器时,在此错误之后,我的所有变量都不会出现。
答案 0 :(得分:0)
在将近一周的时间撞到墙上之后发现了问题,对于其他可能在未来遇到此问题的人我会发布解决方案。
我使用的colladaDOM版本是用/ mDd库(多线程调试dll)编译的,而我的项目是使用/ mtd(多线程调试静态)设置。将我的项目更改为/ MDd后,我的所有问题都消失了。
另一种可能的解决方案是使用/ mtd重建DOM以匹配项目设置。