写入位置 0x00000000 时发生访问冲突

liu447862556 2011-12-18 10:01:09
前些日子开始接触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 这一行。
哪位大虾指点一下。
...全文
1222 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu447862556 2012-01-10
  • 打赏
  • 举报
回复
昨天突发奇想的重装了一下联想光盘中带的显卡驱动,结果,意外的解决了问题。

重装系统后,用的驱动都是ghost自带的驱动,一直没有管这个,害得我以为我的机子没能力,郁闷了好长一段时间,现在问题总算解决了。
liu447862556 2011-12-20
  • 打赏
  • 举报
回复
对于这段程序,我想说的是:在别人的机器上运行通过,在我的机器上就报错。很是纳闷。
liu447862556 2011-12-20
  • 打赏
  • 举报
回复
最近比较忙,很少有时间上网,看到这么多的朋友很积极的参与,我很激动。
虽然问题还是没有解决,在次还是谢过大家。

一叶之舟 2011-12-19
  • 打赏
  • 举报
回复
看一下堆栈吧
gold_water 2011-12-19
  • 打赏
  • 举报
回复
windbg看下错误发生地方
Vincent_Song 2011-12-19
  • 打赏
  • 举报
回复
你程序中是否有未初始化的指针?
对象 2011-12-19
  • 打赏
  • 举报
回复
0x0000000是系统保留位,空指针全指到这,虽然不知道你程序哪有问题,但是很可能是使用了未初始化指针。
little_more 2011-12-19
  • 打赏
  • 举报
回复
int main(int argc, char *argv[])

传参进去没?
liu447862556 2011-12-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vvviippp 的回复:]
看一下堆栈信息,看是哪里出的问题,定位下,应该就是没初始化就使用了
[/Quote]

看了一下堆栈,比较菜,不会操作。
liu447862556 2011-12-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mougaidong 的回复:]
使用了未初始化的指针
[/Quote]

哪个指针?网上也有人这么说,可是怎么改呢?
多喝水ooo 2011-12-18
  • 打赏
  • 举报
回复
看一下堆栈信息,看是哪里出的问题,定位下,应该就是没初始化就使用了
turing-complete 2011-12-18
  • 打赏
  • 举报
回复
使用了未初始化的指针

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧