clq
    
    
    
		
        浏览(0) + 
        2007-02-09 13:20:10 发表
        
编辑
         
        
        
        
        关键字: 
        
 
        
        
        
        
                
        今天发现一个非常奇怪的错误,程序在退出时老是报错,看了一下错误号为216,应当是访问了非法内存,最后发现是一个动态创建的 TWebBrowser 引起的,修改后的代码如下.
constructor TCLQHttpThreadCotrol1.Create(AOwner: TComponent);
begin
  inherited;
  post_data1:=tstringlist.Create;
  pre_data1:=tstringlist.Create;
  is_get1:=false;
  //创建后要自己删除//可能是delphi7的bug
  WebBrowser1:=TWebBrowser.Create(application.MainForm);
  WebBrowser1.Visible:=false;
  
end;
destructor TCLQHttpThreadCotrol1.Destroy;
begin
  //http1.free; //?需要这个调用吗?
  post_data1.Free;
  pre_data1.Free;
  
  WebBrowser1.Free;//创建后要自己删除//可能是delphi7的bug
  WebBrowser1:=nil;//创建后要自己删除//可能是delphi7的bug
  inherited;
  
end;
增加了
  WebBrowser1.Free;//创建后要自己删除//可能是delphi7的bug
  WebBrowser1:=nil;//创建后要自己删除//可能是delphi7的bug
后程序才正常,但实际上 "TWebBrowser.Create(application.MainForm);"已经指明了由主窗体来自动释放的了.更为奇怪的是在一般情况下是不会出错的,只有在程序中调用了 tsavedialog.execute 后在退出程序时才会报这个错.真是百思不得其解. tsavedialog 和主窗体的控件自动释放在什么关系? 这是我碰到的最不可思议的bug了.
        
        
        
        		
		        
                
                
     
    
 
	
	
     
	
    NEWBT官方QQ群1: 276678893
    可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
    但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
    验证问题说明申请入群原因即可.