我是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安装可能有问题。答案 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);
一部分。 这会导致您获得例外。