【问题标题】:Corruption of the heap & F12 Problem堆损坏和 F12 问题
【发布时间】:2011-01-21 19:49:51
【问题描述】:

我正在尝试使用 GLUT 和 C++ 画一条线 - IDE 是 VS 2008 - 但出现错误消息:

Windows 在 图形.exe。

这可能是由于 堆,表示存在错误 Graphics.exe 或它拥有的任何 DLL 已加载。

这也可能是由于用户 Graphics.exe 有时按 F12 重点。

输出窗口可能有更多 诊断信息

当然,我的代码中没有任何断点,这是我的代码:

#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

有人知道这个问题吗?

【问题讨论】:

  • 嗯,你按F12了吗?此外,更多的感叹号不会让人们更快地回答。 :)
  • 是的,我做到了!它给了我 glutMainLoop() 函数中的问题......但我不知道它有什么问题!
  • 它在哪一行中断?堆栈或堆看起来是否已损坏?
  • 你真的按了F12吗?如果不按F12,问题会消失吗? F12 键会自动进入 Windows 上的调试器 - 如果没有附加调试器,则它不起作用。
  • 只是,不要按 F12 键。这就像放置一个断点然后说“啊,我已经停在断点处了!” F12 只是作为一个实用程序存在。如果你不需要打破,不要按F12。

标签: c++ breakpoints glut heap-corruption


【解决方案1】:

在谷歌上搜索了一些结果。当您在调试器中运行时,看起来 F12 由操作系统保留Here is a good thread 关于这个主题。 MSFT 在this connect article 中提供了一个解决方法。它的要点是,当调试器处于活动状态时,操作系统会通过在当前正在执行的代码行处输入调试器来响应 F12。

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

【讨论】:

  • 我用谷歌搜索了这个问题。这是内存问题。我所知道的是函数 glutMainLoop() 是将程序置于一个无限循环中,该循环检查来自鼠标等设备的输入并显示初始图形。但我的问题是:问题出在哪里......我的代码很清楚,并且错误出现在 GLUT 标头中?实际上我不明白。 F12 键是否可以帮助我解决问题..或者只是找到它在哪里?
  • @N.S.:如果你按下 F12 并且你在调试器中,那么它就会像遇到断点一样。如果您没有按 F12 或没有在调试器中运行,则可能是堆损坏。当前行显示为glutMainLoop() 的事实仅意味着这是活动功能。如果您不使用调试符号进行编译或链接到库的调试版本,那么调试器不知道程序计数器在库中的哪个位置 - 它只知道您调用了glutMainLoop()
【解决方案2】:

补充一下 D.Shawley 所写的内容:F12 键非常方便,只要您知道它。

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

【讨论】:

    【解决方案3】:

    我在 Visual Studio 中用 C 语言编程时收到了同样的错误消息,与 F12 键完全无关。对于通过 Google 找到这篇文章的其他 C 语言编程人员 - 我的错误是由我的代码中的一个悬空指针引起的。

    检查您所有的“空闲”语句,并确保您没有留下任何指向您正在释放的内存的指针。

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 2012-03-05
      相关资源
      最近更新 更多