Я возился с 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
}
Я думаю, что я пропустил что-то важное здесь о указателях и констелах и тому подобное. Есть идеи?
Как представляется, importer
разрушает, когда функция заканчивается, и поэтому объектная scene
больше не указывает на действительный указатель. Я думаю, что динамическое распределение importer
с
Assimp::Importer *importer = new Assimp::Importer;
должен сделать трюк.
Вы должны позже уничтожить этот объект с помощью
delete importer;
importer
.