新建unit2,贴上下面代码:unit Unit2;
interface
uses
Forms,DXDraws;type TDX=class
DirectX:TDXDraw;
constructor Create(Owner:TForm);
destructor Free();
end;implementation
constructor TDX.Create(Owner:TForm);
begin
if DirectX=nil then begin
DirectX:=TDXDraw.Create(Owner);
DirectX.Parent:=Owner;
DirectX.Initialize();
DirectX.Visible:=true;
end;
end;destructor TDX.Free();
begin
if DirectX<>nil then begin
DirectX.Free();DirectX:=nil;
end;
end;
end.
在主unit里加入下面代码(记得在uses里添加DXDraws,unit2):
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;dx:array [0..1] of TDX;
begin
for i:=1 to 2 do begin //第2次发生错误
dx[0]:=TDX.Create(Self);
dx[1]:=TDX.Create(Self);
dx[0].Free();dx[0]:=nil;
dx[1].Free();dx[1]:=nil;
end;
end;它有2次循环,第1次没发生错误,第2次循环时发生错误。我试过达到这样的条件时才会有错:1.必须是以类的形式把DelphiX包含在类里,2.必须是数组,例如dx,如果是单个则不会发生错误.指针释放好像没问题,到底是什么问题?谢谢!
interface
uses
Forms,DXDraws;type TDX=class
DirectX:TDXDraw;
constructor Create(Owner:TForm);
destructor Free();
end;implementation
constructor TDX.Create(Owner:TForm);
begin
if DirectX=nil then begin
DirectX:=TDXDraw.Create(Owner);
DirectX.Parent:=Owner;
DirectX.Initialize();
DirectX.Visible:=true;
end;
end;destructor TDX.Free();
begin
if DirectX<>nil then begin
DirectX.Free();DirectX:=nil;
end;
end;
end.
在主unit里加入下面代码(记得在uses里添加DXDraws,unit2):
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;dx:array [0..1] of TDX;
begin
for i:=1 to 2 do begin //第2次发生错误
dx[0]:=TDX.Create(Self);
dx[1]:=TDX.Create(Self);
dx[0].Free();dx[0]:=nil;
dx[1].Free();dx[1]:=nil;
end;
end;它有2次循环,第1次没发生错误,第2次循环时发生错误。我试过达到这样的条件时才会有错:1.必须是以类的形式把DelphiX包含在类里,2.必须是数组,例如dx,如果是单个则不会发生错误.指针释放好像没问题,到底是什么问题?谢谢!
解决方案 »
- delphi 中用sql语句整理表字段值,三个iif语句就报错
- 求delphiQQ群
- 怎么样才能把一个FORM上的所有COMPONENT都写到一个文件中,然后再读出来显示在FORM上呢?
- 精度转换问题
- 请问有没有像IE中的输入框那样的控件,在输入第一个字后就把相应的词提示出来。
- 给Button上画图20分
- MiS中怎么使子窗体填充整个客户区(不是最大化)?
- ASCII chr(5)chr(7)chr(17)chr(19)
- activex时而灵时而不灵
- 开发modem-modem通讯的思路??
- Delphi的异常处理究竟有没有用的啊?
- 求!除了Registry和KOL修改注册表 的另外一种修改注册表方法。
dx[0].Free();dx[0]:=nil; 这样试一下
dx[1]:=TDX.Create(Self);
dx[1].Free();dx[1]:=nil; 然后加断点 看下dx[0] 和dx[1]的地址 是否一样 一句一句加断点能调试出来的。下载一个ExceptionLog 这个能帮助你调试错误,找到出错的代码
dx[1]:=TDX.Create(Self);
dx[0].Free();dx[0]:=nil;
dx[1].Free();dx[1]:=nil; 换成 dx[0]:=TDX.Create(Self);
dx[0].Free();dx[0]:=nil;
dx[1]:=TDX.Create(Self);
dx[1].Free();dx[1]:=nil; 就不会出错了,这是什么原因?有时我想一次放两个在窗体上,有没有解决的办法,谢谢了!
dx[1]:=TDX.Create(Self);
dx[1].Free();dx[1]:=nil;
dx[0].Free();dx[0]:=nil; 这时候不会发生错误了。真的很奇怪,难道是DelphiX本身的Bug?呵呵,谢谢了