我有一個問題,當我想用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。
非常感謝。
你爲什麼不檢查'node'是NULL? – PaulMcKenzie
@PaulMcKenzie'node'和'scene-> mRootNode'不是NULL – PandaChen
*所以我不知道如何調試它,* - 如果你沒有調試它,你怎麼知道錯誤發生在哪裏? ?此外'目錄'不在任何地方使用。最後,你在調試優化版本嗎?如果是這樣,那麼你就不會將代碼行與正在執行的實際代碼同步。哦,你真的應該使用API函數(例如,在shlwapi.lib中定義的'Pathxxx'函數)來將路徑名分割成它們的組件。 – PaulMcKenzie