2011-10-18 36 views
0
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; 
} 

該函數在運行結束第一遍循環後運行debug assertion失敗。循環將正確運行,它將輸入最後一個if語句並正確設置所有值。然而,當通過完成,並在開始下一個通過之前,它會調試斷言失敗。我認爲它試圖銷燬字符串類型的變量,但是當它試圖刪除它時會破壞它。我不知道問題是什麼。它似乎是在我的程序的其他部分從文件中獲取字符串並將其放在std :: string中。我通過完全刪除這些來修復這些問題,但這個問題無法移除,因此需要將其解決。ColladaDOM加載程序調試斷言錯誤,字符串?

不知道這與它有什麼關係,但我使用visual studio 11 dev預覽版,並使用編譯器vs100(vs10的編譯器)設置。

dbgheap.c 線:1322

表達:_CrtISValidHeapPointer(pUserData)

還當我用我的瓦爾調試沒有從這個函數的錯誤後顯示出來。

回答

0

確定在將我的頭靠在牆上將近一週後發現問題,對於未來可能遇到此問題的其他人,我將發佈解決方案。

當我的項目使用/ mtd(多線程調試靜態)設置時,我使用的colladaDOM版本是使用/ mDd庫(多線程調試dll)編譯的。在將我的項目更改爲/ MDd後,我的所有問題都消失了。

另一種可能的解決方案是使用/ mtd重建DOM來匹配項目設置。