Справка по отладке ошибок указателей - PullRequest
0 голосов
/ 15 июня 2011

Я новичок в C ++ и пытаюсь запрограммировать реплику Pong с использованием freeglut с Visual Studio 2010. Мой код работал нормально, пока я не внес в него некоторые изменения, чтобы сделать его более объектно-ориентированным. Когда я запустил его снова, он работал пару раз, пока я не сделал небольшое редактирование (если честно, я не могу вспомнить, что именно я изменил, так как я только собрал свой код на следующее утро), и я получил это ошибка выполнения, как только я запустил программу:

Необработанное исключение на 0x1000bbae в Pong.exe: 0xC0000005: Место записи нарушения прав доступа 0x000000a8.

Я не особенно хорош в отладке, но я считаю, что это происходит в строке glutDisplayFunc () в моем основном цикле. Я думаю, что это как-то связано с нулевыми указателями, но я понятия не имею, что. Может ли кто-нибудь помочь мне найти мою проблему?

Ниже приведена соответствующая часть моей программы (Main.cpp):

include "header.h"

using namespace std;

int main(int argc, char** argv) {
    //Initialize GLUT
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(WIDTH, HEIGHT); //Set the window size

    //Create the window
    //modesetup(2);
    //Set handler functions for drawing, keypresses, and window resizes
    glutDisplayFunc(mainDraw);
    glutKeyboardFunc(handleKeypress);
    glutKeyboardUpFunc(handleKeyup);
    glutSpecialFunc(handleSpecial);
    glutSpecialUpFunc(handleSpecialUp);
    glutReshapeFunc(handleResize);
    glutTimerFunc(25, update, 0);

    glutMainLoop(); //Start the main loop.  glutMainLoop doesn't return.
    return 0; //This line is never reached
}

Заранее спасибо!

РЕДАКТИРОВАТЬ: Я только что сделал новую программу, которая использует очень стандартные функции для всего, но я все еще получаю эту ошибку. Я начинаю думать, что может быть что-то не так с моей установкой freeglut.

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Используйте F5 для запуска программы с отладкой в ​​visual studio. Когда вы получаете сообщение об ошибке, отладчик должен поставить вас прямо на линию с нелегальным доступом. Если у него нет исходного кода для местоположения, проверьте стек вызовов.

Ура & hth.

1 голос
/ 18 января 2012

Вы, наверное, уже решили проблему. Но так как у меня была та же проблема, и я не мог найти ответ два, я отвечу на вопрос:

Вы просто забыли написать

glutCreateWindow("Windowname");

функция до

glutDisplayFunc(mainDraw);
glutKeyboardFunc(handleKeypress);
glutKeyboardUpFunc(handleKeyup);
glutSpecialFunc(handleSpecial);
glutSpecialUpFunc(handleSpecialUp);
glutReshapeFunc(handleResize);
glutTimerFunc(25, update, 0);

часть. Это приводит к исключению, которое вы получаете.

1 голос
/ 15 июня 2011

Запустите вашу программу под valgrind . Это даст вам гораздо больше информации о проблеме и даже может указать на ошибки памяти, кроме непосредственной причины сбоя.

...