Delphi 访问地址00407518处的Voilation读取表格上的地址C3EF9FFE关闭?

Delphi 访问地址00407518处的Voilation读取表格上的地址C3EF9FFE关闭?,delphi,delphi-xe3,indy10,Delphi,Delphi Xe3,Indy10,我正在使用delphi-xe3和indy 10,5小时后无法解决此错误。一切正常(值按预期显示),但当我关闭窗体时,它会显示access voilation错误。我不知道创建前正在释放的对象在哪里,或者是否还有其他内容?或者,我如何才能到达产生此错误的线路 以下是vcl表格申请的代码 type TForm1 = class(TForm) encode: TButton; decode: TButton; Memo1: TMemo; procedure enco

我正在使用delphi-xe3和indy 10,5小时后无法解决此错误。一切正常(值按预期显示),但当我关闭窗体时,它会显示access voilation错误。我不知道创建前正在释放的对象在哪里,或者是否还有其他内容?或者,我如何才能到达产生此错误的线路

以下是vcl表格申请的代码

type
  TForm1 = class(TForm)
    encode: TButton;
    decode: TButton;
    Memo1: TMemo;
    procedure encodeClick(Sender: TObject);

  private
    { Private declarations }
  public
       obj:pprotocol;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.encodeClick(Sender: TObject);
begin

new(obj);

memo1.Lines.Add('encode click');

obj.username:='xyz';
obj.ex_ip:='36.42.68.411';
obj.i_ip:='192.168.1.1';
obj.ex_port:=6002;
obj.i_port:=6003;


          encode_packet(obj);
          decode_packet(obj.arr);
          dispose(obj);

end;
end.
这是库文件(.pas文件)

错误指向这个东西并指向销毁

 procedure TObject.Free;
    begin
      if Self <> nil then
    {$IFDEF AUTOREFCOUNT}
        __ObjRelease;
    {$ELSE}
  ->      Destroy;
    {$ENDIF}
    end;
procedure-TObject.Free;
开始
如果Self为零,则
{$IFDEF AUTOREFCOUNT}
__ObjRelease;
{$ELSE}
->破坏;
{$ENDIF}
结束;

您在字符串上的跺脚…更改为

move(arr1[ind],user[1],length(user));
ind:=ind+length(user);
move(arr1[ind],s1[1],length(s1));
ind:=ind+length(s1);
move(arr1[ind],ip[1],length(ip));

如果你想知道为什么只有少数人在看你的问题:这里的大多数人都在看用delphi标记的问题,那么代码有什么问题吗?或者表单在结束时没有被释放。这取决于你。检查一下“局部变量”窗格(ctrl+alt+l)的self,你可能会知道释放了什么。它甚至可能有一个名称..它在局部变量窗口中不显示任何内容,现在也显示运行时错误216。是的,我自己发现,错误会减少,但不会完全消除。然后,您必须执行其他操作,而不是显示代码…因为我不会从您的代码中获得更多GPF。正确的礼仪是,一旦您有了(即使只是部分)解决方案,你应该发布它…这样其他人就可以停止工作,或者至少是问题的那一部分。是的,我告诉过你,我马上就做了。我看到你的帖子晚了。我说,只有字符串导致的内存泄漏得到了解决,还有一些我无法解决的问题。好的,现在工作正常了,非常感谢@House of Dexter和所有人。我正在使用此函数System.ReportMemoryLeaksOnShutdown在窗体上创建其显示一些内存泄漏,但AV错误现在不显示。
move(arr1[ind],user[1],length(user));
ind:=ind+length(user);
move(arr1[ind],s1[1],length(s1));
ind:=ind+length(s1);
move(arr1[ind],ip[1],length(ip));