2010-02-27 69 views
3

的我想提请使用GLUT与C++的线路 - 的IDE是VS 2008 - 但错误消息出现了:腐败堆和F12问题

Windows已经引发了断点 图形。可执行程序。

这可能是由于 堆的腐败,这表明在 Graphics.exe或任何它 加载的DLL的一个错误。

这也可能是由于用户 按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 

任何人都知道这个问题?

+0

那么,你推F12?另外,更多的感叹号不会让人们更快地回答。 :) – GManNickG 2010-02-27 16:30:26

+0

是的,我做到了!它给了我glutMainLoop()函数中的问题......但我不知道它有什么问题! – 2010-02-27 16:42:56

+0

它打破了什么路线?堆栈或堆看起来损坏了吗? – 2010-02-27 16:45:24

回答

6

有一点谷歌搜索产生了一些结果。当您在调试器中运行时,看起来F12是,由OS保留。 Here is a good thread关于这个问题。有一个解决方法可从位于this connect article的MSFT获得。这个要点在于,当调试器处于活动状态时,操作系统通过将调试器输入到当前正在执行的代码行中来响应F12。

如果你不在调试器中,那么这可能是一个堆栈损坏问题。你的代码片段看起来很简单,但我不知道GL是否足够了解你是否错过了一个必需的调用或违反了其他一些程序规则。

+0

我已经搜索了这个问题,这是一个内存问题 我知道的是函数glutMainLoop()是将程序放入一个无限循环,检查鼠标等设备的输入并显示初始图形,但是我的问题是:问题出在哪里......我的代码很清晰,并且GLUT头部中出现了错误?实际上,不知道F1​​2键可以帮我解决问题,或者只是为了找到它的位置 – 2010-02-27 18:10:28

+0

@NS:如果你已经按下了F12,并且你在调试器中,那么它将会像打到如果你没有按下F12或者没有在调试器中运行,那么可能会发生堆损坏,当前行显示为'glutMainLoop()'这一事实就意味着这是一个活动函数,如果你不编译带有调试符号或链接到调试版本那么调试器不知道程序计数器在库中的哪个位置 - 它只知道你调用了'glutMainLoop()'。 – 2010-02-27 20:27:48

0

只是为了增加D.Shawley的写作:一旦你知道它,F12键非常方便。

值得强调的是,F12键是仅在调试器连接时才有效并且在没有调试器时此键正常工作。尽管如此,避免将F12快捷方式映射到应用程序中任何有用的东西(有时需要调试时)更为安全。

0

我在C编程visual studio时得到了同样的错误信息,完全与F12键无关。对于C语言编程人员来说,通过Google发现这篇文章 - 我的错误是由我在代码中的悬挂指针引起的。

检查所有“免费”语句,并确保没有任何引用您要释放的内存的指针。