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以匹配项目设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top