2

この const ポインターを返す際に問題が発生しました。デバッガーを使用すると、シーンが正しくインポートされ、変数シーンに保存されていることがわかりました。シーンを返した後、シーンが指すコンテンツは失われ、loadData() を呼び出すクラスからアクセスできなくなります。

const aiScene* IOHandler::loadData(const std::string& pFile){
    Assimp::Importer importer;

    const aiScene* scene = importer.ReadFile(pFile,
    aiProcess_CalcTangentSpace      |
    aiProcess_Triangulate           |
    aiProcess_JoinIdenticalVertices |
    aiProcess_SortByPType);

    return scene;
}

(ImporteraiScene(struct)は assimp ライブラリの一部であり、変更できません)

シーンがスタックに格納されていると仮定し、リターン コールによってスタック ポインタがリセットされ、コンテンツが失われます。C ++でこのような問題を処理するにはどうすればよいですか?

4

3 に答える 3

0

私の推測ではAssimp::Importer、によって返されたリソースを所有しているReadFileためimporter、スコープ外になるとリソース (メモリ) が解放され、ダングリング ポインターが返されます。パラメータで渡すかstatic、関数のスコープを超えて存続するようにするか、scene動的に割り当てて、返される内容をコピーすることができReadFileます-

const aiScene* scene = new aiScene(*importer.ReadFile(pFile,
aiProcess_CalcTangentSpace      |
aiProcess_Triangulate           |
aiProcess_JoinIdenticalVertices |
aiProcess_SortByPType));
于 2013-05-28T18:28:53.093 に答える