delphi访问冲突

delphi访问冲突,delphi,access-violation,Delphi,Access Violation,问候 以下代码给出了一个错误: "Project prKlanten.exe reaised exception class EAccessviolation with message 'acces violation at address 004d7767 in module 'prKlanten.exe'. Read of address 0000005C." procedure TfmOrder.FormCreate(Sender: TObject); begin dm.atD

问候

以下代码给出了一个错误:

"Project prKlanten.exe reaised exception class EAccessviolation with message 'acces violation at address 004d7767 in module 'prKlanten.exe'.
Read of address 0000005C."

procedure TfmOrder.FormCreate(Sender: TObject);
begin 
    dm.atDier.Open;
    while not dm.atDier.eof do
    begin
       cbKeuze.Items.Add(dm.atDier['Diernaam']);
       dm.atDier.Next
    end;
      dm.atDier.Close;
    end;
有人知道为什么吗?如果您需要更多信息,请随时询问

[编辑]


有关更多信息,请参阅jasper的帖子

当您访问非您的内存时,会导致访问冲突,例如:

  • 使用零指针
  • 缓冲区溢出
  • 访问未初始化的指针/对象
  • 访问已释放的指针/对象
访问冲突(或非法/未初始化指针)的可能来源:

  • dm未设置
  • 未设置dm.atDier
  • cbKeuze未设置
  • dm.atDier['diernam']失败
为了提供更多帮助,我们需要知道是哪一行导致了访问冲突

添加 如果你点击一个临时按钮将代码移动到一个临时位置,AV也会发生吗?换句话说,从OnCreate中删除代码,因为您无法100%确定dm是否完全可以运行。OnActivate是另一种可能性,但您需要检查第二次激活。

我打赌
dm
尚未创建

我打赌
cbKeuse.Items
尚未创建

我打赌,
dm
尚未创建

更改此位并再次运行:

[snip]
begin
    Assert(dm<>nil);
    Assert(dm.atDier<>nil); 
    dm.atDier.Open;
    while not dm.atDier.eof do
        [snip]
[snip]
开始
断言(dmnil);
断言(dm.atDiernil);
dm.atDier.Open;
而不是dm.atDier.eof do
[剪报]

断言通过了吗?

如果在调试器下运行,它将在错误更新我的答案所在的行中断。嫌疑犯是OnCreate中的呼叫。请Jasper停止添加不是问题答案的答案。如果要提供更多详细信息,请编辑问题。如果您无法编辑问题,因为它不是您的问题,请提出您自己的问题!如果这不是整理,我将被迫投票关闭太本地化。