Colladadom加载器调试断言错误,在字符串上?
题
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 Preview,并使用编译器VS100(VS10的编译器)设置。
dbgheap.c线:1322
表达式:_crtisvalidheappointer(puserdata)
同样,当我使用调试器时,此功能中的所有var都没有出现在错误之后。
解决方案
OK在将我的头靠在墙上的近一个星期后发现了这个问题,对于将来可能会遇到这个问题的其他人,我会发布解决方案。
我使用的ColladAdom的版本是在我的项目使用 /MTD(多线程调试静态)设置时使用 /MDD库(多线程调试DLL)编辑的。将我的项目更改为 /MDD之后,我所有的问题都消失了。
另一个可能的解决方案是使用 /MTD重建DOM以匹配项目设置。
不隶属于 StackOverflow