关于Delphi中TStringList的一个疑惑(5分)

  • 主题发起人 主题发起人 金圣叹
  • 开始时间 开始时间

金圣叹

Unregistered / Unconfirmed
GUEST, unregistred user!
关于Delphi中TStringList的一个疑惑
见如下程序:
procedure Tform1.Button1click(Sender: TObject);
var
Msg:TStringList;
begin
Msg:=TStringList.Create;
Msg.Strings[0]:='Hello';
Showmessage(Msg.Strings[0]);
end;
直接给msg.strings附值,编译时通过,但运行时出现错误,提示
“List index out of bounds(0).”吾百思不得其解,请高手指点。
 
>>Msg.Strings[0]:='Hello';
需要使用Add方法,他和ListBox里面的一样,需要使用Add、Delete 等
Msg.Add('Hello');
 
读tStringList时不是这样吧,是不是Msg.items!?
 
procedure Tform1.Button1click(Sender: TObject);
var
Msg: TStringList;
begin
Msg := TStringList.Create;
Msg.Add('Hello');
Showmessage(Msg.Strings[0]);
Msg.Free;
end;
 
是的,应该用ADD函数。
 
因为语法正确,所以编译的时候可以通过;
运行的时候报错是因为内存空间访问错误,原因如下:
使用Add或者Append方法添加字符串的时候,Delphi才为新的字符串在内存中分配空间。
所以在你执行TStringList.Create之后没有分配空间,只有在你Add了第一个字符串之后
才分配的空间,StringList[0]才不为空,在执行Add之前它指向一个未分配空间的内存位
置,所以报错!
 
楼上的说得很对,赋值没错,编译肯定是能通过的,
 
接受答案了.
 
后退
顶部