指针错误调试帮助

时间:2011-06-15 02:19:55

标签: c++ debugging pointers access-violation

我是C ++的新手,我正在尝试使用FreeGLlut和Visual Studio 2010编写Pong的副本。我的​​代码工作正常,直到我对它进行了一些修改,以使其更加面向对象。当我再次运行它时,它工作了几次,直到我进行了一些小的编辑(说实话,我不记得我改变了什么,因为我第二天早上只构建了我的代码),我收到了这个运行程序时出现运行时错误:

Pong.exe中0x1000bbae处的未处理异常: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 个答案:

答案 0 :(得分:1)

valgrind下运行您的程序。它将为您提供有关该问题的更多信息,甚至可能指出除了崩溃的直接原因之外的内存错误。

答案 1 :(得分:1)

使用F5在visual studio中运行调试程序。当您收到错误时,调试器应该将您放在非法访问的行上。如果它没有该位置的源代码,则检查调用堆栈。

干杯&第h

答案 2 :(得分:1)

你可能已经解决了这个问题。但由于我遇到了同样的问题而无法在任何地方找到答案,我将回答这个问题:

你只是忘了写

glutCreateWindow("Windowname");

之前的

功能

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

一部分。 这会导致您获得例外。