if Assigned(memo1) then
Memo:=Memo1;

解决方案 »

  1.   

    memo1,sock从住线程传来,都是有值的
      

  2.   

    不好意思,我搞错了AV是执行
       inherited create(false);产生的
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,winsock, StdCtrls,unit2;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
       sock2:TSocket;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
       datas :WSAData;
       socket1:TSOCKET;
       addr:sockaddr_in;
       hostent1:hostent;   addrclient:sockaddr_in;
       lent:integer;
       thread_s:S_Client;
    begin  if WSAStartup (1,datas)<>0   then
        ShowMessage('Error');
      socket1:=socket(AF_INET, SOCK_STREAM ,0);
      if socket1=INVALID_SOCKET  then
        ShowMessage('scoket error') ;
      hostent1:=(gethostbyname('smtp.163.net'))^;
      addr.sin_family :=AF_INET;
      addr.sin_port:=htons(1001);
      addr.sin_addr.S_addr:=INADDR_ANY;
      if bind(socket1,addr,sizeof(addr))<>0 then
       ShowMessage('bind error');
      if listen(socket1,1)<>0 then
        ShowMessage('listen error');
      while True do
      begin
       sock2:=accept(socket1, @addrclient,@lent);
       thread_s.Create(sock2,memo1);
       Application.ProcessMessages ;
      end
    end;end.//----------------------------------------------------------------
    unit Unit2;interfaceuses
      Classes,winsock,StdCtrls;type
      S_Client = class(TThread)
    //
      private
        { Private declarations }
        sock_s :TSOCKET;
        memo:TMemo;
        procedure Receive();
      public
        constructor Create(sock:TSOCKET;memo1:TMemo);
      protected
        procedure Execute; override;
      end;implementation{ Important: Methods and properties of objects in VCL or CLX can only be used
      in a method called using Synchronize, for example,      Synchronize(UpdateCaption);  and UpdateCaption could look like,    procedure S_Client.UpdateCaption;
        begin
          Form1.Caption := 'Updated in a thread';
        end; }{ S_Client }procedure S_Client.Execute;
    begin
      { Place thread code here }
    end;
    constructor S_Client.Create(sock:TSOCKET;memo1:TMemo)  ;
    begin   memo:=memo1 ;
       sock_s:=sock;
       inherited create(false);end;
    procedure S_Client.Receive();
    //TYPE
    //  PChar =^Char;
    var buf:^Char;
    begin
      getmem(buf,1024);
      recv(sock_s,buf,1024,0);
      memo.Lines.Add(buf^);
    end;
    end.
      

  4.   

    这个没有什么错误啊,你的memo和sock_s是线程类的成员变量吗?
      

  5.   

    是啊,但是运行到
     inherited create(false);就 AV了
      

  6.   

    inherited create(false);
       memo:=memo1 ;
       sock_s:=sock;
    可以吗
      

  7.   

    inherited create(false);
       memo:=memo1 ;
       sock_s:=sock;
    可以吗 
    还是AV
      

  8.   

    AV就是Access violation ,里入当你试图访问一个空指针时就会出现这种错误
      

  9.   

    初始化!!!
    你只定义了memo:TMemo;但是它的内存地址呢???在线程create的时候,一起把memo等一起create;再试试吧
      

  10.   

    memo1是从主线程传来的,是窗体上的控件,没有初始化问题
      

  11.   

    能把程序给我看看吗?
    如果可以,请发到我的信息[email protected]
      

  12.   

    真奇怪,你的主窗体不会死掉吗?while true...