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

时间:2013-11-28 16:48:52

标签: delphi access-violation

我有这个问题,我可以通过抛弃这个错误来解决这个问题,兄弟我按下一个调用表单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;

1 个答案:

答案 0 :(得分:3)

明显的问题出现在下面的注释行中,您可以在其中创建名为TFBuscarRequisicionBodega的内容,并将其分配给名为FBuscarRequisicionBodega的变量,并设置FBuscarRequisicionBodega的一些属性。然后,您在名为ShowModal完全不同的变量上调用FBuscarRequisicion,然后将其释放。你现在已经孤立FBuscarRequisicionBodega(没有任何东西可以释放它),同时在你没有为(ShowModal)提供代码的东西上调用FBuscarRequisicion,并在之后释放它。再次单击该按钮将调用ShowModal上最后一次释放的内容。

这个问题看起来很清楚,甚至没有读取变量名称 - 只需检查这两行代码:

  FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
  FBuscarRequisicion.ShowModal;

查看变量名长度如何不匹配? (.没有对齐,因为第一个字母比第二个字母多六个字母。)

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

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;