因为:
弹出应用程序: agcps.exe - 应用程序错误: "0x77f40cae" 指令引用的 "0x45003c28" 内存。该内存不能为 "read"。
我想确定是什么地方有问题.
你可以用调试器attach上,然后0x77f40cae找到对应的模块,然后自己看汇编:)
http://www.7880.com/Info/Article-5d3bcc40.html
up
有个模块窗口,看看eip属于哪个模块
还可以通过stack窗口察看调用关系,用以判断那个函数出错,
http://www.vckbase.com/document/viewdoc/?id=1473
用ollydbg试试。
0x77f40cae,还需要结合看一下进程的所有模块函数的实际加载地址。
这个一般来说应该是GDI32.DLL,因为你的EXE和DLL的话,如果没有修改过基地址的话,是不会加载到这个地址的
应该是GDI有关的代码造成的问题
反正如果地址比较大的话,一般来说不会是你的代码,具体的需要结合StackWalk看一下调用堆栈。
GDI32.DLL的加载地址是77F100000
SHLWAIP.DLL的加载地址是77f60000
这个地址你通过.map,.pdb都无法查看到的。
高手,高手,高高手。
楼主这回真是遇到救星了。
这个地址肯定是系统dll的地址,不根据堆栈是没办法找到你代码的哪个地方出错的。
首先,同上,这个肯定是系统DLL的
兄弟可以先用模块查看器来确定是哪个DLL的函数,不同系统的地址是不一样的,所以还是要自己查一下。
其次,因为不知道楼主的程序怎么写的,这种问题可能是你调用的函数所传递的指针类型的参数错误,要么就是你的程序中有对自己进程中的代码修改导致的。
也有可能是你的程序有两个线程,其中线程A将线程B还在使用的某块内存释放了,也会导致这种问题
很简单啊,在vc IDE的output窗口中看Context右边的显示,就是你当前断点所在的调用堆栈,最顶上的就是产生中断的函数或模块。
建议你用这个exception class来捕获你的程序错误
http://www.codeproject.com/cpp/exception.asp
不过需要用VC6.0
这个需要观察stack frame才能做到。方法如楼上所提供的