当客户端第四次连接时,红色标记的那句出现,invalid pointer operation错误,高手请指教
unit hlncserver;interfaceuses
  ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, DB, ADODB,
  ComCtrls;  //
  type
     fame=record
     fame_id:integer;                               /
     id:double;                                    //
     crop:integer;                                  //
     time:tdatetime;                                //
     count:integer;                                  //
     grass:integer;                                 //
     water:integer;                                   //
     Snoopy:integer;                                  //
     friends:string[200];                            //
     feiendscount:integer;                            //
     Length :integer;
  end;
  //定义结构体
  type
  count=record
  //bianhao:integer;                              //头文件
  nick:  string[200];                           //用户名 昵称
  sex:integer;                                    //性别
  photo: string[50];                              //头像
  vip:  integer;                                // vip级别
  gold:double;                                   //金钱用于排行榜
  egold:double;
  exp:double;                                    //经验用于排行榜
  land:integer;                                 //
  iArr_fame: array of  fame;                          // ,
  tuigangren:string[200];                          //推广人
  tuigangcount:integer;                           //此人   推广数量
  time:double;                                    //在线时间//本月在线超过90小时
  length :integer;
  end;
type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Button1: TButton;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    Edit1: TEdit;
    Memo1: TMemo;
    StatusBar1: TStatusBar;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
   USES ACTIVEX;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
      IdTCPServer1.Active:= true;
      //timer1.Enabled:=true;
      StatusBar1.Panels[0].Text :='等待客户端连接...';
end;procedure TForm1.Button2Click(Sender: TObject);
begin
     IdTCPServer1.Active :=false;
     StatusBar1.Panels[0].Text :='服务器套接字连接已经关闭,无法接受客户端的连接请求....';
end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
   ise: tstringlist  ;
   stream: TMemoryStream;
   tou,tou1,tou2,tou3,tou4,name2,name3,mima2,name1,gen1,gens,names,h_name:string;
   oreader,i,j:integer;                             
   famelastid:double;                            
   s_count:count;
   //irr_fame:array of  fame ;               //
   user_id: integer;                              //begin
     //接受数据********************************************************************************
     if not AThread.Terminated and AThread.Connection.Connected then
          begin
              Coinitialize(nil);
              ADOConnection1.Connected:=true;
              stream:= TMemoryStream.Create ;
              ise:=tstringlist.Create ;
              athread.Connection.ReadStream(stream,athread.connection.readinteger,false);
              stream.Position :=0  ;
              //Memo1.Lines.LoadFromStream(stream);
              //stream.ReadBuffer(buf,stream.Size );
              ise.Delimiter:=' ';
              ise.LoadFromStream(stream);
              //stream.;
              //ise.Delimiter:=' ';
              //memo1.Lines.Add(ise.Text ) ;
               //ise.Delimiter:=' ';
               tou:=ise[0];
              ///memo1.Lines.Add(tou );              //头文件判断              //如果头
               if tou='fame' then
                  begin
                      name2:=ise[1] ;
                      mima2 :=ise[2]     ;
                      with  memo1.Lines     do
                          begin
                               Add(Name2);
                               add(mima2);
                               //add(ip);
                              //add(inttostr(port));
                          end;
                      //判断是否有这个用户名并发送数据SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
                       try
                          //Coinitialize(nil);
                          //ADOConnection1.Connected:=true;                          ADOQuery1.Close();
                         ADOQuery1.SQL.Text := 'SET NAMES gbk;';
                         ADOQuery1.ExecSQL();
                          ADOQuery1.Close;
                          ADOQuery1.SQL.Clear ;
                          ADOQuery1.SQL.Add('select * from  nc_user where nc_username='''+name2+''' and nc_psw ='''+mima2+'''');
                          ADOQuery1.Open ;
                         if ADOQuery1.RecordCount >0 then
                              begin
                                  
                                  s_count.land:= ADOQuery1.FieldValues['nc_land'];
                                  user_id:= ADOQuery1.FieldValues['nc_id'];
                                  s_count.nick:=ADOQuery1.FieldValues['nc_nick'];
                                  s_count.sex:= ADOQuery1.FieldValues['nc_sex'];
                                   s_count.photo:= ADOQuery1.FieldValues['nc_touxiang']          ;
                                    s_count.vip:= ADOQuery1.FieldValues['nc_vip'];
                                     s_count.gold:= ADOQuery1.FieldValues['nc_gold'];
                                      s_count.egold:= ADOQuery1.FieldValues['nc_egold'];
                                      s_count.exp:= ADOQuery1.FieldValues['nc_exp'];
                                      s_count.tuigangren:= ADOQuery1.FieldValues['nc_tuiguangren'];
                                      s_count.tuigangcount:= ADOQuery1.FieldValues['nc_tuiguangcount'];
                                       s_count.time:= ADOQuery1.FieldValues['nc_zxtime'];
                                      memo1.Lines.Add(s_count.nick);
                                     if s_count.land =0 then //没;;;;;;
                                    begin
                                        ADOConnection1.BeginTrans  ;
                                          try
                                         ADOQuery1.Close;
                                         ADOQuery1.SQL.Clear ;
                                         adoquery1.SQL.Add('update nc_user set nc_land=:n1c_land' )       ;
                                         ADOQuery1.Parameters.ParamByName('n1c_land').Value :=0;
                                         adoquery1.ExecSQL;
                                         ADOConnection1.CommitTrans  ;
                                          except
                                             ADOConnection1.RollbackTrans  ;
                                          end;
                                         // SetLength(irr_fame, 6);
                                         SetLength(s_count.iArr_fame, 6);
                                          ADOQuery1.Close;
                                        ADOQuery1.SQL.Clear ;
                                        ADOQuery1.SQL.Add('select * from  famelastid ');
                                        ADOQuery1.Open ;
                                        famelastid:= ADOQuery1.FieldValues['nc_famelastid'];
                                         memo1.Lines.Add(floattostr(famelastid));
                                        for i:=1 to 6  do
                                        begin
                                         s_count.iArr_fame[i].id:=famelastid+strtofloat(inttostr(i));
                                        end;
                                        
                                     end //结束没                                     
                                     else //  
                                         begin
                                         end; //  结束如果                              end
                           else  //没有这个人发送信息让注册
                              begin
                              end;                       finally
                       end;
                      //结束判断是否有这个用户名并发送数据SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
                  end 
               //
               else
                   if tou='hunting' then
                       begin
                       end;  
                ise.Free ;
                stream.Free;
              CoUninitialize;          end; // if not AThread.Terminated and AThread.Connection.Connected then************************end;end.

解决方案 »

  1.   

    Access violation at address *********. Read of address *********”
    有时出现这个错误
      

  2.   

    SetLength(s_count.iArr_fame, 6); for i:=0 to 5  do 
    ............
    从0开始的
      

  3.   

    //接受数据******************************************************************************** 
        if not AThread.Terminated and AThread.Connection.Connected then 
              begin 
                  //Coinitialize(nil); 
                  //ADOConnection1.Connected:=true; 
                  //把上面两句注释掉
                  stream:= TMemoryStream.Create ; 
                  ise:=tstringlist.Create ; 
                  athread.Connection.ReadStream(s