2010-02-27 75 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發現這篇文章 - 我的錯誤是由我在代碼中的懸掛指針引起的。

檢查所有「免費」語句,並確保沒有任何引用您要釋放的內存的指針。