ColladaDOM加载器调试断言错误,对字符串
ColladaDOM loader debug assertion errors, on strings?
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;
}
此函数将在结束第一次循环后运行run debug assertion failed。循环将正确运行,它将进入最后一个if语句并正确设置所有值。然而,当传递完成,在它开始下一个传递之前,它将调试断言对我失败。我认为它试图销毁字符串类型变量,但当它试图删除它时,有些东西正在破坏。我不知道问题出在哪里。它似乎在我的程序的其他部分这样做,从文件中获取字符串并放置在std::string中。我通过完全删除它们来修复它们,但这个不能被删除,它需要存在。
不知道这是否有任何关系,但我正在使用visual studio 11开发预览,并使用编译器vs100 (vs10的编译器)设置。
dbgheap.c线:1322
表达式:_CrtISValidHeapPointer (pUserData)
经过近一周的苦思冥想,我终于找到了这个问题,对于那些将来可能遇到这个问题的人,我将发布解决方案。
我使用的colladaDOM版本是用/mDd库(多线程调试dll)编译的,而我的项目使用/mtd(多线程调试静态)设置。在将我的项目更改为/MDd之后,我所有的问题都消失了。
另一个可能的解决方案是使用/mtd重新构建DOM以匹配项目设置。
相关文章:
- C++函数的字符串错误"find_first_of"
- 流字符串错误输出
- 在图像上覆盖文本的程序会产生无休止的字符串错误
- 字符串错误的向量
- C++字数统计程序使用C字符串错误在程序运行后
- 从函数返回字符串C++错误
- 字符串错误或编译器错误
- SQL 字符串错误?没有这样的列
- C/C++ 字符串错误与 ARM SEG 故障总线错误
- 字符串错误输出
- C++调用堆上的类(空字符串错误)
- 运行时字符串错误C++
- 字符串递归函数中的字符串错误
- 从文本文件/文本流中读取Q字符串错误
- 动态内存c++程序中的字符串错误
- 发现c++正则表达式子字符串错误模式
- 在Cocos2d-x中比较字符串错误
- c++读TXT到字符串错误
- 字符串错误检查
- Chromium嵌入式框架VS2013字符串错误