【问题标题】:Memory error using OpenGL "glTexImage2D"使用 OpenGL“glTexImage2D”的内存错误
【发布时间】:2010-11-14 19:46:41
【问题描述】:

我一直在关注这个关于 OpenGL 和 C++ 的教程: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06

...我发现自己面临着相当大的错误。每当我尝试编译时,我的程序都会因 System.AccessViolationException 类型的错误而崩溃。我已将问题隔离在此函数中:

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

如果您不想浏览该教程,内存似乎是这样设置的:

AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);

任何帮助都会很棒。谢谢。

【问题讨论】:

    标签: c++ memory opengl


    【解决方案1】:

    您正在崩溃,因为 TextureImage[0] 为 NULL。最初的memset 将其设置为NULL;如果您按照教程进行操作,则下一行代码是这样的:

    if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))
    

    请注意,这里有一个 = 符号,而不是您通常看到的双 ==(您甚至可能会在此处收到编译器警告;要抑制这种情况,请添加作业周围的额外括号))。确保您正确复制了这行代码,并且这里有一个 =

    如果您确实有一个=,那么请检查以确保LoadBMP 返回一个非NULL 值。如果它返回NULL,最可能的原因是它找不到位图文件Data/NeHe.bmp,要么是因为它不存在,要么是在错误的目录中寻找它。确保您当前的工作目录设置正确,以便它可以找到图像。

    【讨论】:

    • 比额外的括号更好的是明确的比较。喜欢if (NULL != (TextureImage[0] = LoadBMP("Data/NeHe.bmp"))) { ... }
    • 它似乎没有返回 NULL,因为我测试了一个非 NULL 值,它似乎通过了测试并且仍然崩溃。至于正确设置工作目录,我该怎么做?如果有帮助,我正在使用 Visual Studio 2010。
    【解决方案2】:

    原来我尝试加载的位图太大。我把它缩小到 256x256px,效果很好。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 2012-04-09
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多