写入位置 0x00000000 时发生访问冲突
前些日子开始接触OpenGL,我用的是VS2005,按照网上说的,把相应的.h、.lib、.dll等都添加到了相应的地方,看书写了一个简单的程序:
#include <windows.h>
#include <GL/glut.h>
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POINTS);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.5, 0.0, 0.0);
glVertex3f(0.0, 0.5, 0.0);
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(200, 100);
glutInitWindowSize(500, 500);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
这个程序和书上的一模一样,编译通过,运行的时候出现了:OpenGL.exe 中的 0x69ba3a96 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突。在网上也搜了一下,可是怎么也解决不了,
找了一个实力程序,在别人的机器上都可以运行,在我的机器上就不行,以为是系统的问题,重装了系统还不行,还去了趟客服,都没啥问题。
看了一下反汇编:
9BA3A82 call 695BDD60
69BA3A87 add esp,4
69BA3A8A cmp edi,2
69BA3A8D je 69BA3A98
69BA3A8F cmp edi,5
69BA3A92 jne 69BA3AA6
69BA3A94 xor eax,eax
69BA3A96 mov byte ptr [eax],al
69BA3A98 push esi
69BA3A99 call dword ptr [esi+1DEC0h]
69BA3A9F add esp,4
69BA3AA2 mov eax,edi
69BA3AA4 pop edi
69BA3AA5 ret
69BA3AA6 cmp edi,1
69BA3AA9 jne 69BA3A98
69BA3AAB mov ecx,dword ptr [esi+1DA64h]
69BA3AB1 mov edx,dword ptr [ecx+34854h]
69BA3AB7 mov eax,dword ptr [esi+1D32Ch]
69BA3ABD cmp eax,dword ptr [edx]
69BA3ABF je 69BA3AA2
69BA3AC1 cmp dword ptr [esi+1D344h],0
69BA3AC8 je 69BA3AE7
69BA3ACA mov ecx,dword ptr ds:[6A118F0Ch]
69BA3AD0 push esi
程序卡在了69BA3A96 mov byte ptr [eax],al 这一行。
哪位大虾指点一下。