Возврат указателя портит объект (нарушение прав доступа)

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
}

Я думаю, что я пропустил что-то важное здесь о указателях и констелах и тому подобное. Есть идеи?

  • 1
    Есть ли какая-то часть сцены, занимаемая импортером? Потому что это выходит за рамки.
  • 1
    Может быть что-то происходит при уничтожении importer .
Теги:
pointers
access-violation
assimp

1 ответ

1
Лучший ответ

Как представляется, importer разрушает, когда функция заканчивается, и поэтому объектная scene больше не указывает на действительный указатель. Я думаю, что динамическое распределение importer с

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

должен сделать трюк.

Вы должны позже уничтожить этот объект с помощью

delete importer;

  • 0
    Ах, это решило это! Нужно ли мне как-то беспокоиться об уничтожении «импортера» позже?
  • 1
    Хорошо, приятно знать. :) И я буду, как только это позволит мне сделать это. :п

Ещё вопросы

Сообщество Overcoder
Наверх
Меню