公司用C++Builder开发的管理软件在退出时不时出现下面的错误:
Access Vilolate at address 40A2A405,Read of address OE6C2794.Process stopped.Use Step or Run to continue.
点了“确定”就出了 “CPU”框:
大概框内容如下
[0x007040a0]=0x00000000 Thread # 0x00000B5C
40A2A405 807A0800 cmp byte ptr [edx+0x08],0x00
40A2A409 7504 jnz +0x04
40A2A40B 33C0 xor eax,eax
40A2A40D EB02 jmp +0x02
40A2A40F B001 mov al,0x01
40A2A411 5D pop ebp
40A2A412 C20400 ret 0x0004
40A2A415 8D4000 lea eax,[eax+0x00]
dsnapcon60.@Sconnect@TscocketTransport@SetConnected$qqso:
40A2A418 55 push ebp
40A2A419 8BEC mov ebp,esp
...................................等等
点前进 都是锁定在 40A2A405 807A0800 cmp byte ptr [edx+0x08],0x00 这行,
请各位大侠教教我这个小菜怎么样来调试?究竟是哪一行出了错,感谢不尽!!
------解决方案--------------------------------------------------------
在debug状态下运行的时候,可以在view->debug windows->modules窗口查看当前项目的模块列表,里面有各个模块相应的地址,根据出错地址40A2A405查一下属于哪个函数,然后再进一步查找原因
------解决方案--------------------------------------------------------
应该是用了多线程,程序退出的时候线程释放顺序不正确,导致有些资源被释放了,后面代码仍在访问