invalid pointer operation错误是怎回事?(100分)

  • 主题发起人 dolphinji
  • 开始时间
D

dolphinji

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是Delphi6+ADO+SQL7
每次关闭主窗体时就报此错,在运行一步就报“RunTime Error 217”!我想是和线程处理有关,能帮我看看吗?
procedure TForm_main.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(Critical1);//临界区
TThread:=TestThread.create;
//启动线程
end;

procedure TForm_main.N_quitClick(Sender: TObject);
begin
if Assigned(Form_Show) then
begin
Form_Show.Close;
TDrawLines.Terminate;
TThread.Terminate;
end;
Application.Terminate;
end;

procedure TForm_main.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(Critical1);//临界区
end;

procedure TForm_Show.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
Form_Show:=nil;
end;
 
Form_Show:=nil;??
 
Form_Show是fsMDIChild
Form_main是主窗体
 
抱歉,是这样的:
procedure TForm_main.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if Assigned(Form_Show) then
begin
Form_Show.Close;
TDrawLines.Terminate;
end;
TThread.Terminate;
Application.Terminate;
end;

TDrawLines是在Form_Show中create的.好像和它无关,停了TDrawLines也是报错
 
有指针(或form)create后没free;仔细看看
 
TThread.Terminate;
执行后线程不会马上结束,这时你关闭程序就会出现错误
你应该Wait
再关闭程序
 
waitfor
或者
Sleep一下
 
有些释放应放在destroy中,而不是close中
 

if Assigned(Form_Show) then
begin
Form_Show.Close;
if not TDrawLines.Terminated then
begin
TDrawLines.Terminate;
TDrawLines.Free;
end
if not TThread.Terminated then
begin
TThread.Terminate;
TThread.Free;
end
end;
 
好像怎么试也不行
waitfor就报错"句柄无效........"等等
 
多人接受答案了。
 
顶部