Я столкнулся со странной проблемой при кодировании программы OpenGl с C ++ под Visual Studio Express 2010.
Я использую: Windows 7 64bit, OpenGl 4.x
Мой партнер использует: Windows XP 32bit, Visual Studio Express 2010, OpenGl 2.x
До сих пор мы только рисовали вершины для наших моделей, и это прекрасно работает в обеих системах (я знаю, я знаю: устарело, но мы все еще новички). Теперь он включил библиотеку для импорта 3d-сеток и создания анимации. У него все отлично работает но я получаю
Исключение первого шанса в 0x0055f838 в Ant Simulation.exe: 0xC0000005: расположение чтения нарушения доступа 0x00bb0000.
Необработанное исключение в 0x0055f838 в Ant Simulation.exe: 0xC0000005: расположение чтения нарушения доступа 0x00bb0000.
С помощью отладчика я отследил проблему до линии
glDrawArrays (GL_QUADS, 0, n_data);
Я пытался ловить код, но ничего не срабатывает. Как ни странно, вчера я мог пройти по этой строке 2-3 раза с отладчиком, пока он не сломался, сегодня он падает напрямую. Я проверил вчера, что n_data то же самое каждый раз. Если я выполняю * .exe в Windows, он падает (код ошибки ниже). Когда мой партнер отправляет мне свой * .exe, он обычно не работает, но 1 раз я мог его запустить. Я воспроизвел ошибку на других окнах. Мы попробовали на Linux 64bit и нет проблем. Я попытался запустить его в режиме совместимости, но проблема остается той же (все еще вылетает).
Я искал вокруг и нашел это:
https://blogs.msdn.com/b/debugger/archive/2010/05/12/visual-studio-debugger-fails-to-catch-unhandled-exception-for-a-windows-form-or-wpf- application.aspx? Перенаправление = истина
Не уверен, правильно ли я понял. Есть исключение, которое я не могу поймать, но которое убьет приложение — но почему у другой системы нет проблемы с этим исключением?
Я пытался решить ее так, как описано в ссылке, но в VS Express мне кажется, что у меня нет меню, чтобы выбросить исключения из первого шанса. Я попытаюсь получить VS 2012, но тем не менее, я хотел бы знать: действительно ли это вещь для Windows или может быть проблема с моим кодом, которая вызывает сбой (как предложено в одном из комментариев в ссылке)? Я также был бы очень признателен за объяснение того, что на самом деле происходит …
Ошибка, которую я получаю при запуске * .exe:
Название проблемного события: APPCRASH
Имя приложения: Ant Simulation.exe
Версия приложения: 0.0.0.0Метка времени применения: 511d99a3
Имя модуля неисправности: StackHash_0a9e
Версия модуля неисправности: 0.0.0.0
Временная метка модуля неисправности: 00000000Код исключения: c0000005
Смещение исключения: 0037f278
Версия ОС: 6.1.7601.2.1.0.256.48
Locale ID: 1031
Дополнительная информация 1: 0a9e
Дополнительная информация 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительная информация 3: 0a9e
Дополнительная информация 4: 0a9e372d3b4ad19135b953a78882e789
«Исключение первого шанса» в Windows — это не исключение C ++, это означает, что система во время выполнения обнаружила недопустимое поведение вашей программы, например разыменование недействительного указателя. На самом деле, «Место чтения нарушения доступа 0x00bb0000» очень многое говорит о том, что именно это и происходит.
Разыменование неверного указателя не обязательно приводит к одинаковому поведению в разных системах или даже в разных запусках на одном компьютере: см. Такие вопросы, как Сбой кода C в Windows, но не в Linux для получения дополнительной информации об этом. В этом случае ошибка, по-видимому, происходит внутри реализации GL, но это, вероятно, вызвано тем, что более ранний код приложения дал ему неверную информацию.
Убедитесь, что все включенные массивы вершин имеют хотя бы n_data
элементы. (Будьте особенно осторожны, чтобы убедиться, что они не только n_data - 1
элементы, и это n_data
содержит ожидаемое вами значение.) Также следует проверить, что все указатели, которые вы ранее передали в функции GL, были действительными. Также нужно проверить гораздо больше состояния GL, но это будет мое первое предположение.
Других решений пока нет …