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

Я возился с 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
}

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


person manabreak    schedule 23.11.2013    source источник
comment
Какая-либо часть сцены принадлежит импортеру? Потому что это выходит за рамки.   -  person nvoigt    schedule 23.11.2013
comment
Возможно, что-то произошло во время разрушения importer.   -  person defube    schedule 23.11.2013


Ответы (1)


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

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

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

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

delete importer;

person Leon    schedule 23.11.2013
comment
Ах, это решило это! Нужно ли мне как-то беспокоиться об уничтожении «импортера» позже? - person manabreak; 23.11.2013
comment
Хорошо, приятно знать. :) И я это сделаю, как только это позволит мне это сделать. :п - person manabreak; 23.11.2013