自己写了一个不行,帮我写一个,多谢了!(最好给出代码) var mySample:TSample;
begin
mySample:=TSample.Create;-->一执行到这里就会出错,为什么?
end;
类的实现如下 TSample = class (TObject)
public
str:TStrings;
constructor Create;
destructor Destroy; override;
end;
constructor TSample.Create;
begin
inherited Create;
str:=TStringList.Create;
end;destructor TSample.Destroy;
begin
str.Free;
inherited;
end;
begin
mySample:=TSample.Create;-->一执行到这里就会出错,为什么?
end;
类的实现如下 TSample = class (TObject)
public
str:TStrings;
constructor Create;
destructor Destroy; override;
end;
constructor TSample.Create;
begin
inherited Create;
str:=TStringList.Create;
end;destructor TSample.Destroy;
begin
str.Free;
inherited;
end;
解决方案 »
- 线程!线程!!线程!!!(Delphi版)
- 在delphi中的DBgrid中实现下拉框,数据在b表中,动态代码怎么实现?
- 给分之作:请问谁有关于indy TidTcpClient / TidTcpServer 的多线程通信(文件传输)的例子或原代码呢?
- 有关于DBEdit数据控制控件的一个问题,还望好人能够相助啊!!!!!!!!!
- 超难问题,如何得到其他程序里轻量文字控件里的内容,该控件无句柄
- 简单的打包问题
- delphi ide 中 editor property 中得editor font 调用得文件再那里呢?
- 关于socket通信的问题,帮忙看看,多谢!!!!
- 动态创建 from 释放问题
- 各位老兄引路:怎样用delphi搞一个象oicq类似的东西(高分送上)???
- insert时用触发器检查是否有已存在的字段
- 高手请多指教,帮忙找一下错误?
Type
TSample=Class(TStringList)继承 TStringList 多方便
我做了各最简单的例子如下,麻烦帮我看看为什么会出错。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TSample = class (TObject)
public
str:TStrings;
constructor Create;
destructor Destroy; override;
end; TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
constructor TSample.Create;
begin
inherited Create;
str:=TStringList.Create;
str.Add('sample');
end;destructor TSample.Destroy;
begin
str.Free;
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
var ss:TSample;
begin
ss.Create;
ShowMessage(ss.str.Strings[0]);
ss.Free;——————》执行玩这里后出错!!!!!!
end;
end.
错误信息:
Project Project1.exe raised exception class EStringListError with message 'List index out of bounds(12449116)'. Process stopped. Use Step or Run to continue.
耽搁各位一点时间,帮我解释一下啊!
begin
FreeAndNil(str) //str.Free;这样试试!
inherited;
end;
var ss:TSample;
begin
ss.Create; // 这里应该是 ss := TSamle.Create;
ShowMessage(ss.str.Strings[0]);
ss.Free;——————》执行玩这里后出错!!!!!!
end;
这创建的东西存到哪了??应当是procedure TForm1.Button2Click(Sender: TObject);
var
ss: TSample;
begin
ss :=TSample.Create;
ShowMessage(ss.str.Strings[0]);
ss.Free;// ——————》执行玩这里后出错!!!!!!
end;
begin
str.Free;
inherited;
end;str你定义的是TStrings,但创建的是TStringList,所以在释放时会存在错误。
用FreeAndNil试试,如果有错,那么就用下面的语句:
TStringList(str).Free;
destructor TSample.Destroy;
begin
str.Free;
inherited;
end;str你定义的是TStrings,但创建的是TStringList,所以在释放时会存在错误。
用FreeAndNil试试,如果有错,那么就用下面的语句:
TStringList(str).Free;
str定义的虽然是TStrings 但是Free的时候是会调用
Destroy;因为Destroy被定义为虚函数,而TStringList又正确的覆盖了它,
所以其实TStringList的Destroy实际是有被调用到的,而且TStrinList会
在最后调用Inherted;一层层的往上调用的!