2016-01-22 36 views
0

我有一個問題,當我想用​​assimp導入一個簡單的模型,每當我編譯代碼,它拋出:無法加載與assimp模型,訪問衝突

0xC0000005: Access violation reading location 0x00000000.

我知道這是一些關於一個空指針,但我無法找到它的代碼去如下:

Model::Model(GLchar* path) 
{ 
    loadModel(path); 
} 

void Model::loadModel(std::string path) 
{ 
    Assimp::Importer import; 
    const aiScene* scene = import.ReadFile(
     path, 
     aiProcess_Triangulate | 
     aiProcess_FlipUVs); 

    if (!scene || scene->mFlags == AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode){ 
     std::cout << "ERROR::ASSIMP::" << import.GetErrorString() << std::endl; 
     return; 
    } 
    directory = path.substr(0, path.find_last_of('/')); 

    aiNode* node = scene->mRootNode; 
    for (GLuint i = 0; i < node->mNumChildren; i++){ 
     aiMesh* mesh = scene->mMeshes[node->mMeshes[i]]; 
     meshes.push_back(processMesh(mesh, scene)); 
    } 

    for (GLuint i = 0; i < node->mNumChildren; i++){ 
     processNode(node->mChildren[i], scene); 
    } 
} 

我使用這個模型類作爲一個全局變量:

//include stuff 

//other global variable 
Model mymodel("D:/Project/xxx/xxx.obj"); 

int main(){ 
//... 
return 0; 
} 

事情是錯誤發生在行directory = path.substr(0, path.find_last_of('/'));和行aiNode* node = scene->mRootNode;之間,所以我不知道如何調試它,誰能告訴我如何解決這個問題?我使用Visual Studio 2013-64和assimp-3.1.1。

非常感謝。

+1

你爲什麼不檢查'node'是NULL? – PaulMcKenzie

+0

@PaulMcKenzie'node'和'scene-> mRootNode'不是NULL – PandaChen

+1

*所以我不知道如何調試它,* - 如果你沒有調試它,你怎麼知道錯誤發生在哪裏? ?此外'目錄'不在任何地方使用。最後,你在調試優化版本嗎?如果是這樣,那麼你就不會將代碼行與正在執行的實際代碼同步。哦,你真的應該使用API​​函數(例如,在shlwapi.lib中定義的'Pathxxx'函數)來將路徑名分割成它們的組件。 – PaulMcKenzie

回答

0

我想問題可能在這部分代碼:

Model::Model(GLchar* path) 
{  
    loadModel(path); // path is declared a string in loadModel function - type conversion might not be happening as expected. 
} 

檢查,如果你得到的就行了路徑變量正確/有效值:

directory = path.substr(0, path.find_last_of('/')); 

這個鏈接可能會有幫助: GLchar could not be resolved

注意:我不熟悉OpenGL,但看看你得到這個錯誤是第一個pla我會檢查。

+0

謝謝你的回答,但我已經檢查過,並且這不是問題。 – PandaChen