出现list index out of bounds(0)?

出现list index out of bounds(0)? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiNetwork/html/delphi_200612312048352.html
运用Socket编写了一个客户端,不过只能连上和接收服务器的信息,不知道为何不能发送信息,而且在退出时出现这个错误list   index   out   of   bounds(0),究竟该怎么改啊?查了很多资料都不知道该如何下手,请各位帮忙看看  
  unit   Client;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ScktComp,   StdCtrls,   ComCtrls,   Menus;  
   
  type  
      TfrmClient   =   class(TForm)  
          MainMenu1:   TMainMenu;  
          Cennect:   TMenuItem;  
          DisConnect:   TMenuItem;  
          About:   TMenuItem;  
          Exit:   TMenuItem;  
          SSent:   TMemo;  
          CSent:   TMemo;  
          btSent:   TButton;  
          StatusBar:   TStatusBar;  
          SesInfor:   TGroupBox;  
          Label1:   TLabel;  
          edIP:   TEdit;  
          Label2:   TLabel;  
          EdPort:   TEdit;  
          ClientSocket:   TClientSocket;  
          procedure   CennectClick(Sender:   TObject);  
          procedure   ClientSocketConnect(Sender:   TObject;  
              Socket:   TCustomWinSocket);  
          procedure   CSentKeyDown(Sender:   TObject;   var   Key:   Word;  
              Shift:   TShiftState);  
          procedure   ClientSocketRead(Sender:   TObject;   Socket:   TCustomWinSocket);  
          procedure   ClientSocketDisconnect(Sender:   TObject;  
              Socket:   TCustomWinSocket);  
          procedure   btSentClick(Sender:   TObject);  
          procedure   AboutClick(Sender:   TObject);  
          procedure   ExitClick(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      frmClient:   TfrmClient;  
      ServerSocket:TServerSocket;  
   
  implementation  
  uses   unit2;  
   
  {$R   *.dfm}  
   
  //激活客户端  
  procedure   TfrmClient.CennectClick(Sender:   TObject);  
  begin  
      ClientSocket.Address:=edIP.Text;       //设定IP  
      ClientSocket.Port:=StrToInt(edPort.Text);     //设定端口  
      ClientSocket.Active:=true;  
  end;  
   
  //建立连接  
  procedure   TfrmClient.ClientSocketConnect(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  begin  
      Statusbar.Panels.Items[0].Text:='成功连接到服务器'+ServerSocket.Name;  
  end;  
   
  //在对话框按回车发送信息  
  procedure   TfrmClient.CSentKeyDown(Sender:   TObject;   var   Key:   Word;  
      Shift:   TShiftState);  
  begin  
      ClientSocket.Socket.SendText(CSent.Lines[CSent.Lines.Count   ]);  
  end;  
  //按发送按钮发送信息  
  procedure   TfrmClient.btSentClick(Sender:   TObject);  
  begin  
      ClientSocket.Socket.SendText(CSent.Lines[CSent.Lines.Count   ]);  
  end;  
   
  //获取服务器的信息以及显示客户端本身发送的信息  
  procedure   TfrmClient.ClientSocketRead(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  begin  
      SSent.Lines.Add(Socket.ReceiveText);  
  end;  
   
  //断开连接  
  procedure   TfrmClient.ClientSocketDisconnect(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  begin  
      ClientSocket.Active:=false;  
      Statusbar.Panels.Items[0].Text:='关闭与服务器的连接';  
      CSent.Lines.Clear;  
  end;  
   
   
  //获取软件信息  
  procedure   TfrmClient.AboutClick(Sender:   TObject);  
  begin  
      Form2.Show;    
  end;  
   
  //退出程序  
  procedure   TfrmClient.ExitClick(Sender:   TObject);  
  begin  
      if   ClientSocket.Active   then  
            ClientSocket.Close;  
      frmClient.Close;  
  end;  
   
  end.  
 

(CSent.Lines[CSent.Lines.Count   -   1]);  
 

//按发送按钮发送信息  
  procedure   TfrmClient.btSentClick(Sender:   TObject);  
  begin  
      ClientSocket.Socket.SendText(CSent.Lines[CSent.Lines.Count-1   ]);  
  end;  
   
 

这个错误一般都是操作越界,你以后只要检测一些数组类型之类,或者指针的东西,就行了  
  就如上面2位说的,index是从0开始的,所以你要记得-1就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个编程错误,通常是因为您试图访问列表中不存在的索引。例如,如果您有一个列表,其中有5个元素,则索引从0到4,如果您试图访问索引5,则会出现此错误。为了避免这种错误,您需要在访问列表元素之前检查索引是否在范围内。 ### 回答2: “List Index Out of Bounds”(列表索引超出范围)是一种常见的错误类型,通常在使用列表(List)时频繁出现。 列表(List)是Python中最常见的数据类型之一,是一种有序的可变序列。每个元素都可以通过索引进行访问,索引从0开始计数。这意味着,第一个元素的索引为0,第二个元素的索引为1,以此类推。当您使用一个超出列表范围的索引时,就会出现List Index Out of Bounds”(列表索引超出范围)的错误。 例如,如果一个列表有10个元素,却尝试访问第11个元素,就会超出列表范围,产生该错误。 常见导致此错误的原因如下: 1. 索引超出列表范围:此情况发生在尝试访问一个不存在的索引时,例如访问一个列表的第11个元素(第10个元素是该列表的最后一个元素,因为Python中的索引是从0开始计数的)。 2. 操作空列表:此情况发生在尝试对一个空列表进行操作时,例如尝试访问空列表的第一个元素,这时会报“List Index Out of Bounds”(列表索引超出范围)的错误。 为避免出现该错误,可以使用以下方法: 1. 确保索引不超出列表范围:在使用列表时,请确保索引不会超出列表的范围。可以使用列表的len()函数获取列表的长度,从而防止出现索引超出范围的错误。 2. 避免操作空列表:在操作列表之前,请确保列表中有元素。可以使用列表的len()函数来判断列表是否为空。 总之,在Python中,正确的使用列表是非常重要的。当出现List Index Out of Bounds”(列表索引超出范围)的错误时,您应该仔细查看代码并确保没有出现上述错误原因之一。 ### 回答3: “列表索引错误”是一种常见的编程错误,通常在试图从列表中访问一个不存在的索引时出现。每个列表都有一个索引范围,它表示可以访问的元素数量。如果试图访问一个索引超出这个范围,Python 解释器会抛出“列表索引错误”异常。 例如,如果你尝试访问一个包含 10 个元素的列表的第 11 个元素,你将会收到一个“列表索引错误”的异常。这是因为列表的索引范围是从 0 到 9,而你试图访问的元素超过了这个范围。 解决“列表索引错误”的方法很简单,只需确保你访问的索引在列表范围之内。你可以通过检查列表的长度来确定它的索引范围,并使用条件语句来避免出现索引错误: ``` my_list = [1, 2, 3, 4, 5] index = 5 if index < len(my_list): print(my_list[index]) else: print("Index out of bounds") ``` 上面的示例代码首先将一个整数“5”赋值给变量“index”,然后使用条件语句检查该变量是否超出了列表“my_list”的索引范围。如果索引在范围内,代码将打印列表中相应的元素。否则,它将打印一条消息表示索引越界。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值