首页  »   C++

[Debug]

网友分享于:2013-02-29  浏览:25次
[Debug]高手进.
window出错报告:
the   instruction   at   "0x010301ff "   reference   memory   at   "0x******** ".   the   memory   can 't   be   read.

我的问题是:
1:通常应用程序出错,windows都是直接把进程关闭,提示:,你的进程遇到问题需要关闭.我们对此引起的不便表示道歉。
我们可以点击   单击此处查看详细出错信息。

为什么上面   windows   却以   the   instruction   at   ....   来提示出错。

2:通常应用程序的函数地址,都是以004*****开头,因为exe的默认加载地址是   00400000.
      通常的dll内部的函数地址,都以6*******,或7*******,或1*******开头,
      7*******   开头的地址,是系统dll的默认加载地址
      1*******   开头的地址,是用户dll的默认加载地址
      6*******   开头的地址,是当用户dll的默认加载地址有冲突时,系统默认重定位的地址
      (以上三句,是我的个人理解,应该问题不大)
     
      问题是:为什么windows提示的出错指令   是   010301ff,这个地址和谁都挨不着边呀。。。。
      老大们救命,我想,肯定是我上面的对exe   或   dll   的加载的地址的理解有误,但不知道错在哪。




------解决方案--------------------
程序中存在越界访问或者存在野指针被解引用操作。

例如 一个指针new获得的空间被delete后又被使用 ...
------解决方案--------------------
无稽之谈
------解决方案--------------------
输出map文件,然后运行,看看是那里错误。
调试好办看看 函数调用栈,如果没有,那肯定是越界了
------解决方案--------------------
理解很对啊。0x01xxxxxx 这样的地址,有可能是程序分配出一块内存,然后在里面写了一些指令,比如atl的trunk指令和VCL的窗口过程都是这样的。
------解决方案--------------------
可以的话,
断点单步运行你的程序吧,
定位一下错误的语句位置 ...

然后分析一下,
出错位置的几个变量都在之前进行了什么操作 ...
------解决方案--------------------
指针问题吧,一次两次不出错,后面就跑飞了
到那里都不奇怪吧
------解决方案--------------------
如果每次都是这个地址,可能就有问题了,毕竟动态分配的内存很多时候地址会变,但差不多都是这个范围。
------解决方案--------------------
很明显,栈上越界了,有地方修改函数的返回地址。
------解决方案--------------------
我用了个小工具看了一下我的程序的地址空间,贴出部分内容,xx.dll都是自己创建的dll,可见 "0x010301ff "这个地址完全可以是你的某个dll中的地址
00400000 Image 9412608 14 ERWC e:\jobs\..\XX.exe
00CFA000 Free 24576
00D00000 Image 4505600 6 ERWC e:\jobs\..\xx.dll
0114C000 Free 16384
01150000 Mapped 4096 1 -R--
01151000 Free 61440
01160000 Image 114688 6 ERWC e:\jobs\..\xx.dll
0117C000 Free 16384
01180000 Mapped 4096 1 -R--
01181000 Free 61440
01190000 Image 606208 7 ERWC e:\jobs\..\xx.dll
01224000 Free 49152
01230000 Mapped 4096 1 -R--
01231000 Free 61440
01240000 Image 155648 6 ERWC e:\jobs\..\xx.dll
01266000 Free 40960
01270000 Mapped 4096 1 -R--
01271000 Free 61440
01280000 Image 405504 10 ERWC e:\jobs\..\xx.dll
012E3000 Free 53248
012F0000 Mapped 4096 1 -R--
012F1000 Free 61440
01300000 Image 258048 7 ERWC e:\jobs\..\xx.dll
------解决方案--------------------
我用的是Windows核心编程中的一个例子VMMap.exe本来是查看这个程序本身的虚拟地址空间,我加了个控件传入进程ID,可以查看任意现有进程的地址空间
上一页1/2下一页

相关解决方案

最新解决方案