主窗体是fsMDIForm A ,有一个fsMDIChild窗体 B,另外在操作B窗体时,用SHOWMODAL弹出一个DIALOG的窗体C.... 主窗体是fsMDIForm A ,有一个fsMDIChild窗体 B,另外在操作B窗体时,用SHOWMODAL弹出一个DIALOG的窗体C,窗体C上有个按纽,按后SHOWMODAL出窗体D.窗体B上是一个GRID和ADOQUERY控件,我在C上操作,按按扭后,在D选择好具体公司后,MODALRESULT=MROK 后,我去修改 B.ADOQUERY.FIELDBYNAME() 可是老是报告错误,大家遇到过吗?有什么问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 错误提示如下:Access violation at address 0082864E in module 'Account.exe'.Read of address 00000360. 楼主,是不是更改ADOQUERY以外的控件的属性值也会出错? 内存溢出错误了,不要都用SHOWMODAL,你清楚SHOWMODAL和SHOW的区别么。 什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。而且,这是唯一能找出程序崩溃的地方的救星。DELPHI下生成MAP文件的方法:偶只知道下面两种,如果谁知道其他的方法 敬请告知 多谢生成详细的MAP信息的方法1. project -> options -> Linker -> Map file 选择detailed.2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>dcc32 -GD project1.dpr我们的代码为:unit Unit1;//{$D+,L+}interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var I, J: Integer; p: PChar;begin I := 10; J := 0; //I := I div J; // 32 //ShowMessage(IntToStr(I)); p := nil; p^ := 'A'; // 38end;end.// 想必大家看到了 会有返回0地址错误....我们这里就是要让它崩溃,让我让你崩溃 ^_^然后执行 点击 然后出错 我的机器上 崩溃地址为0044d946 如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算:崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000 减去后得到 0004c946 然后查找 0004c946 0044d946 - 00400000 = 0004d946 - 00001000 = 0004c946 <= 后面列出的 0004C946 就是它了 我们用ultraedit32之类的工具打开 .map文件 搜索 0004C94,找到了,然后就找<= 0004c946的那个地址 然后看到了Line numbers for Unit1(Unit1.pas) segment .text 37 0001:0004C944 38 0001:0004C946 39 0001:0004C949 41 0001:0004C97C 41 0001:0004C983o yeah..<星际里面注射兴奋剂的声音 ^_^>.. 38 0001:0004C946 就是它了unit1.pas的第38行!!去代码里看一下 果然就是38行 ^_^.....==============================================你知道$1000是啥东东不?你还没说明白另外,map文件不是唯一的,dcu本身就可以,要不然Delphi IDE也没法找到发生异常的行了,还有如果编译的时候带上turbo debug info,也可以从本身的tds找到行号也有一些工具能够间接从map文件生成符号信息然后附加到目标模块(或者成为独立的一个文件)==============================================一般情况下,基地址的值是 0x00400000 。另外,由于一般的 PE 文件的代码段都是从 0x1000 偏移开始的,所以也必须减去 0x1000 。大家可以看到DELPHI 的设置点击 project -> Linker -> Memory size 的Image base 默认为$00400000 这就是pe loader加载的时候默认加载到的基址。===============================================由于一般的 PE 文件的代码段都是从 0x1000 偏移开始的………… DELPHI中如何用管道实时捕获控制台输出 为什么formshow事件只能触发一次? 怎么实现增量备份的还原 怎么把String类型的数据转换成pchar型的 跨平台访问数据 急 公司任务 请高手教教我 快死人啦~~~~~~ :( 怎样做图片翻转(30分) 在线急待(100分) 请教一个画布的问题! 请问如何用自己的按钮事件实现移动查询后的数据? API函数的引用问题 高分求教!!!如何通过设置Alpha值实现窗体部分透明? 类似日历控件,可以实现窗体背景透明。 如何在多个工程文件中相互引用单元文件?
Access violation at address 0082864E in module 'Account.exe'.Read of address 00000360.
生成详细的MAP信息的方法
1. project -> options -> Linker -> Map file 选择detailed.
2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>dcc32 -GD project1.dpr我们的代码为:
unit Unit1;//{$D+,L+}interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
I, J: Integer;
p: PChar;
begin
I := 10;
J := 0;
//I := I div J; // 32
//ShowMessage(IntToStr(I));
p := nil;
p^ := 'A'; // 38
end;end.
// 想必大家看到了 会有返回0地址错误....我们这里就是要让它崩溃,让我让你崩溃 ^_^
然后执行 点击 然后出错 我的机器上 崩溃地址为0044d946 如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算:
崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000
减去后得到 0004c946 然后查找 0004c946
0044d946 - 00400000 = 0004d946 - 00001000 = 0004c946 <= 后面列出的
0004C946 就是它了 我们用ultraedit32之类的工具打开 .map文件 搜索 0004C94,找到了,然后就找
<= 0004c946的那个地址 然后看到了
Line numbers for Unit1(Unit1.pas) segment .text 37 0001:0004C944 38 0001:0004C946 39 0001:0004C949 41 0001:0004C97C
41 0001:0004C983o yeah..<星际里面注射兴奋剂的声音 ^_^>.. 38 0001:0004C946 就是它了unit1.pas的第38行!!去代码里看一下 果然就是38行 ^_^.....==============================================你知道$1000是啥东东不?你还没说明白
另外,map文件不是唯一的,dcu本身就可以,要不然Delphi IDE也没法找到发生异常的行了,
还有如果编译的时候带上turbo debug info,也可以从本身的tds找到行号
也有一些工具能够间接从map文件生成符号信息然后附加到目标模块(或者成为独立的一个文件)
==============================================一般情况下,基地址的值是 0x00400000 。另外,由于一般的 PE 文件的代码段都是从 0x1000 偏移开始的,所以也必须减去 0x1000 。大家可以看到DELPHI 的设置
点击
project -> Linker -> Memory size 的Image base 默认为$00400000 这就是pe loader加载的时候默认加载到的基址。===============================================由于一般的 PE 文件的代码段都是从 0x1000 偏移开始的
…………