Delphi 模块中地址09A878EE处的访问冲突

Delphi 模块中地址09A878EE处的访问冲突,delphi,access-violation,Delphi,Access Violation,我有一个问题,我可以通过抛出这个错误来解决这个问题,兄弟,我按下一个按钮,调用一个表单Cencillo进行搜索。错误如下 消息:模块'Almacen.pgi'中地址09A878EE的访问冲突。读取地址00000000。 给我这个错误的按钮的代码如下: procedure TfListaEntregaBodegas.SBBuscarClick(Sender: TObject); begin inherited; FBuscarRequisicionBodega := TFBuscarRe

我有一个问题,我可以通过抛出这个错误来解决这个问题,兄弟,我按下一个按钮,调用一个表单Cencillo进行搜索。错误如下

消息:模块'Almacen.pgi'中地址09A878EE的访问冲突。读取地址00000000。

给我这个错误的按钮的代码如下:

procedure TfListaEntregaBodegas.SBBuscarClick(Sender: TObject);
begin
  inherited;
  FBuscarRequisicionBodega := TFBuscarRequisicionBodega.Create(Application);
  FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
  FBuscarRequisicion.ShowModal;
  FBuscarRequisicion.Free;
  dbgListaRequisiciones.Setfocus;
end;

明显的问题在下面的注释行中,您创建了一个名为
TfBusCarrequisitionBodega
的东西,并将其分配给名为
fBusCarrequisitionBodega
的变量,并设置了
fBusCarrequisitionBodega
的一些属性。然后对名为
fBusarrequisition
的完全不同的变量调用
showmodel
,然后释放它。您现在孤立了
fBusarrequisitionOdega
(没有任何东西可以释放它),同时调用了
showmodel
,处理您没有提供代码的东西(
fBusarrequisition
),然后将其释放。再次单击按钮将调用上次释放的内容

这个问题似乎很清楚,甚至不需要读取变量名,只需检查以下两行代码:

  FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
  FBuscarRequisicion.ShowModal;
查看变量名长度如何不匹配?(由于第一个字母比第二个多六个字母,
没有对齐。)

仔细阅读您发布的代码中的变量名,问题似乎非常清楚。(使用调试器两秒钟肯定会告诉您;您真的应该学会使用它)


这是什么语言?我根据您的问题历史记录假设Delphi。其中一个对象是
nil
。使用调试器找出它是哪一个。在第一次调用此事件方法后(第一次单击按钮后),至少
fBusCarRequisition
将成为一个悬空指针。是否只有我一个人想知道
.pgi
是什么?@J.:我也不知道
.pgi
是什么,但以防万一你不知道,Windows将执行具有不可执行扩展名的文件;我偶尔会使用这个技巧来调试那些无法在dev/test上复制的模糊bug。设置生产系统的输出路径,将应用程序扩展更改为类似于
.exd
.xyz
,执行生成(将
Project.exd
放在生产系统上与实际系统一起),设置断点,并仔细调试。找出问题,反转上面的步骤(清除扩展和输出路径),然后修复它。随后删除
.exd
procedure TfListaEntregaBodegas.SBBuscarClick(Sender: TObject);
begin
  inherited;

  // You create something and assign it to one variable here.
  // Set debugger breakpoint on next line (F5, click the grey 
  // gutter to the left of the editor line numbers, or right-click
  // the line and choose Debug->Toggle Breakpoint, run your app (F9),
  // and step through the code with F8.
  FBuscarRequisicionBodega := TFBuscarRequisicionBodega.Create(Application);
  FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;

  // You then call ShowModal on a totally different variable here, then
  // free it after ShowModal returns.
  FBuscarRequisicion.ShowModal;
  FBuscarRequisicion.Free;
  dbgListaRequisiciones.Setfocus;
end;