У меня есть (довольно большое) приложение, которое я написал на C ++, и до недавнего времени оно отлично работало за пределами Visual Studio с момента выпуска релиза. Однако теперь, всякий раз, когда я запускаю его, он говорит «Необработанное исключение в 0x77cf205b в myprog.exe: 0xC0000005: Место записи нарушения прав доступа 0x45000200.» И приводит меня к «crtexe.c» в строке 582 («mainret = main (argc, argv, envp); ") если я попытаюсь его отладить. Обратите внимание, что эта проблема никогда не появляется, если я запускаю свой отладочный исполняемый файл за пределами Visual Studio или если я запускаю отладочную или выпускную сборку в Visual Studio. Это происходит только при запуске релизной сборки за пределами Visual Studio.
Я прошел и поместил в нее множество printfs и пару while (1), чтобы увидеть, когда он действительно произошел сбой, и обнаружил, что нарушение доступа происходит именно в тот момент, когда значение возвращается из функции ( Я возвращаю указатель на объект). Я не до конца понимаю, почему я получаю нарушение прав доступа в тот момент, когда оно возвращается, и, кажется, не имеет значения, что я возвращаю, поскольку это все еще происходит, когда я возвращаю 0.
Ситуация начала падать, когда я добавил функцию, которая много читает из файла, используя ifstream. Я открываю поток каждый раз, когда пытаюсь прочитать новый файл и закрываю его, когда заканчиваю читать.
Если я продолжу пытаться запустить его, он будет запускаться раз в 20 попыток. Кажется, это намного надежнее, если я запускаю его с моего флеш-накопителя (кажется, что он падает 3 или 4 раза, а затем работает нормально - возможно, из-за его более медленной скорости чтения).
Спасибо за вашу помощь, и если я что-то пропустил, дайте мне знать.
РЕДАКТИРОВАТЬ: Новая информация
Ну, я удалил всю функцию и заменил ее на:
IndexedMesh * loadObj(char * objName)
{
ifstream fp_in;
fp_in.open("lol.bmp", ios::in);
fp_in.clear();
fp_in.close();
IndexedMesh * mesh = new IndexedMesh();
printf("finished");
return mesh;
}
Я также попытался сделать это с «return 0» и «return new IndexedMesh ()». Все нормально, пока вы не добавите в него поток ifstream. У меня есть еще 2 открытых потока ifstream в разных функциях (доступ к совершенно другим файлам). Может ли это быть проблемой?
Это на самом деле ошибки в строке возврата сетки (я получил отладчик, работающий с отдельным файлом релиза). Он полностью обнуляет объект меша, когда пытается его вернуть.