Повреждение кучи и проблема F12 - PullRequest
3 голосов
/ 27 февраля 2010

Я пытаюсь нарисовать линию, используя GLUT с C ++ - IDE VS 2008, но произошло сообщение об ошибке:

Windows сработала точка останова в Graphics.exe.

Это может быть связано с повреждением куча, которая указывает на ошибку в Graphics.exe или любую из имеющихся библиотек загружен.

Это также может быть связано с пользователем нажатие F12, в то время как Graphics.exe фокус.

Окно вывода может иметь больше диагностическая информация

конечно, в моем коде нет точки останова, это мой код:

#include <glut.h>


void init (void)
{
 glClearColor(1.0,1.0,1.0,0.0);
 glMatrixMode(GL_PROJECTION);
 gluOrtho2D(0.0,200.0,0.0,15.0);
}//end of the function init

void lineSegment(void)
{
 glClear(GL_COLOR_BUFFER_BIT);

 glColor3f(1.0,0.0,0.0);
 // D R A W  A     L I N E 
 glBegin(GL_LINES);

  glVertex2i(180,15);
  glVertex2i(10,145);

 glEnd();

 glFlush();
}//end of the function "lineSegment"
void main(int argc, char** argv)
{
 glutInit(&argc,argv);
 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 glutInitWindowPosition(50,100);
 glutInitWindowSize(400,300);
 glutCreateWindow("N.S"); 
 init();
 glutDisplayFunc(lineSegment);
 glutMainLoop();

}//end of the "Main" function

Кто-нибудь знает проблему?

Ответы [ 3 ]

6 голосов
/ 27 февраля 2010

Небольшой поиск в Google дал некоторые результаты. Похоже, что F12 зарезервирован ОС , когда вы работаете в отладчике. Вот хорошая ветка на эту тему. Существует обходной путь , доступный от MSFT в этой статье подключения . Суть в том, что когда активен отладчик, ОС отвечает на F12, вводя отладчик точно в той строке кода, которая выполняется в данный момент.

Если вы не находитесь в отладчике, возможно, это проблема повреждения стека. Ваш фрагмент кода выглядит довольно просто, но я недостаточно хорошо знаю GL, чтобы узнать, пропустили ли вы требуемый вызов или нарушили какое-то другое процедурное правило.

0 голосов
/ 19 октября 2012

Я получил то же сообщение об ошибке при программировании в visual studio на C, совершенно не связанное с клавишей F12. Для любого другого программиста на C, который нашел этот пост через Google - моя ошибка была вызвана висящим указателем в моем коде.

Проверьте все ваши «свободные» операторы и убедитесь, что у вас не осталось указателей, относящихся к памяти, которую вы освобождаете.

0 голосов
/ 27 февраля 2010

Просто добавлю к тому, что написал Д.Шоули: клавиша F12 довольно удобна, если вы знаете об этом.

Стоит подчеркнуть, что клавиша F12 активна только при подключенном отладчике , и этот ключ работает нормально, когда отладчика нет. Тем не менее, безопаснее избегать привязки ярлыка F12 к чему-либо полезному в вашем приложении для тех случаев, когда кому-то нужно отладить.

...