0

私は assimp と C++ をいじっていて、ファイルからシーンをロードする簡単な関数を書きました。しかし、ポインタを返そうとするとオブジェクトがめちゃくちゃになってしまい、メンバデータを取得しようとするとアクセス違反になってしまいます。このスニペットは、ケースを示す必要があります。

const aiScene* ResManager::loadScene(const std::string& pFile)
{
    Assimp::Importer importer;
    const aiScene* scene = importer.ReadFile(pFile, aiProcessPreset_TargetRealtime_MaxQuality);
    if(!scene)
    {
        printf("%s\n", importer.GetErrorString());
        return 0;
    }

    // If I break the debug here, 'scene' is valid
    return scene;
}

void ResManager::loadFromFile(const std::string& pFile)
{
    const aiScene* scn = loadScene(pFile);
    // If I break the debug here, 'scn' contains gibberish
}

ここで、ポインターや const などについて重要なことを見逃していると思います。何か案は?

4

1 に答える 1

1

importer関数が終了すると破棄されるように見えるため、オブジェクトsceneは有効なポインターを指しなくなります。importerで動的に割り当てると思います

   Assimp::Importer *importer = new Assimp::Importer; 

トリックを行う必要があります。

後でこのオブジェクトを破棄する必要があります

delete importer;

于 2013-11-23T14:23:18.460 に答える