关于0xC0000005

 0xC0000005: Access Violation错误调试- -
Oh my god,耗费我了几个小时的时间,请教了Zz和Tina后,终于搞定了一部分了。


归根结底是内存分配的问题,如果不分配内存,就会导致访问冲突。

开始是个类的构造没有写,,,(写在另一个类的一个函数里面了,但是没有调用),后来是一些结构没有初始化。调用osip库的init系列初始化后,错误减少了很多。

现在还有很多错误,待我一一debug过去。

————————————————————————————————————

r.exe中的0x7c235aac(mfc71d.dll)处未处理的异常:0xC0000005:读取位置0x00000068时发生访问冲突。


r.exe中的0x7c235aac(mfc71d.dll)处未处理的异常:0xC0000005:读取位置0x00000068时发生访问冲突。

vs2003.net。一个原来用vs.net编写的程序。打开*.sln后按提示转换。加了几个方法。

编译时就出现这个错误。

一般是什么原因造成的啊。

感觉vs2003比我原来用过的所有版本VC的问题加起来还多

--------------------------------------------------------------------------------
悄悄告诉你!!!
数据越界或是定义的指针未释放.

——————————————————————————————————————————
空的指针的可能性最大。使用指针前最好能显式的赋值!
应该是指针的问题
10有8、9
--------------------------------------------------------------------------------
内存访问错误,检查指针,是否为空,是否越界等
--------------------------------------------------------------------------------
你还是用调试定位一下错误吧。
--------------------------------------------------------------------------------
访问空指针
x004136c8,结合.Map文件,查找所对应的源代码。

—————————————————————————————
pBBuf是0x00000000
也就是说是访问pBBuf的时候出问题了,但不知道怎么去查了

——————————————————————————————————————————

rsgl.exe 中的 0x00000000 处最可能的异常:0xC0000005: 读取位置 0x00000000 时发生访问冲突 。
怎么可能发生这种情况呢?

--------------------------------------------------------------------------------
打开Project Setting面板, 看你的Debug和Release的各项设置是否有什么不应该的出入.
--------------------------------------------------------------------------------
没有
--------------------------------------------------------------------------------
有可能指针访问违例了。调试一下看看指针的地址是否变了。
--------------------------------------------------------------------------------
最可能的原因是存在内存的越界访问.....其他可能的原因包括 ASSERT 语句里是不是包括了 release 版本里也必须执行的代码.....
--------------------------------------------------------------------------------
用boundercheck内联到VC6里编译,找出那里有写出界的。
--------------------------------------------------------------------------------
终于搞定,有个类中含有指针,在复制时出错,谢谢大家!

————————————————————————————————————————

我的软件是用VC6.0写的,编译成Release版以后运行在NT4.0+SP6的机器上.但是它运行后短时间(30天)是稳定的,时间一长(2个月) 就最后出来一个访问冲突的错误,然后NT4的Dr.Waston就跑出来报告说:"XXXX.EXE 意外错误:访问冲突(0xc0000005),地址:0x00405239"然后让用户选择关闭还是取消.这里的XXXX.EXE就是我写的软件了.
问题是这个错误差不多每40天才出现一次,软件是运行在某个工厂服务器上的,而每次发生错误的时候我都无法到现场去,我在办公室也无法使这个错误重现,所以只能根据用户给的信息来debug了.而每次得到的错误信息都是上面同样的信息.且引起错误代码地址必定是0x00405239.

我的问题是如何根据系统提供的这个0x00405239地址确定我的程序中哪行源代码出了问题?
--------------------------------------------------------------------------------
呵呵,问题找到了.
原来编译的时候可以生成一个map文件,通过这个map文件可以定位每个函数在内存中的地址.
好了,现在我已经确定了是哪个函数发生了问题了,这下就好找了
--------------------------------------------------------------------------------
VC6.0的project->setting->link->generate mapfile
生成的map文件可以用记事本直接打开查看.
--------------------------------------------------------------------------------
map 对release的Crash的Debug很重要
用VC的都应该学一下.
请朋友们参考Microsoft MSDN John Robbins 的文章
http://www.microsoft.com/msj/defaultframe.asp?page=/msj/1099/bugslayer/bugslayer1099.htm&nav=/msj/1099/newnav.htm
并search "bugslayer", 你debug的工夫会大增

——————————————————————————————————————
可能性 3 种
1:
char *p;
p = new char[number];
delete [] p;
....
// always using p....
p = xxx; // access violation

2:
char *p;
memcpy(p, xxx, number); // access violation

3:
char *p;
p = new char[number];
delete [] p;
.........
delete [] p; // access violation

看你的情况,应该内容已经被清除了但是还在赋值或者进行操作,或者指针根本没有申请内存但是进行了操作。
好像都是废话。。。-_-

你可能感兴趣的:(MFC大杂烩)