1. 程序运行期间动态创建了一些checkbox控件,窗体关闭时没有进行释放(认为窗体关闭时会释放上面的控件)
   关闭这个子窗体的时候程序不会报错,但关闭程序的主窗体时则报错“Access Violation at address FFF40000”2. 若在子窗体关闭时进行释放,代码如下,则关闭程序主窗体的错误代码就变成了“Access Violation at address 00574C32”
procedure TFRHWIPTrend.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
cbox:TCheckbox;
begin
 
  for i:=panel6.ComponentCount-1 downto 0  do
    begin
        //panel6.components[i].Free;
        if (panel6.components[i] is TCheckbox) then
        begin
            cbox:= TCheckbox(panel6.components[i]);
            FreeAndNil(cbox);
        end;
    end;请高手指点该怎么解决这种问题啊?我另外的一个子窗体也有动态控件,但那个就不报错,唉!

解决方案 »

  1.   

    在FormClose函数结束的end上下断,看是先跳出错误还是先跑到断点位置,然后就可以分析是多重释放导致的还是其他原因.如果跑到断点位置没出错,那就是其他问题
      

  2.   

    创建的时候用create(self);或者create(application);
    让它随窗体关闭或者程序退出时自动释放不过,你确定这错误是控件引起的吗(怀疑是其它原因)
      

  3.   

    在FormClose函数结束的end上下断,好像跑到断点位置没出错,那有可能是啥子情况喃?我今天到公司再试一下
      

  4.   

    在主窗体的FormClose函数结束的end上下断点,还没到断点位置就出错了
    我还用了动态数组,跟这个有关系吗?
      

  5.   

    我刚把程序注释掉一部分运行的时候发现,动态生成控件然后结束程序是不会报错的,问题好像处在动态画chart那一块。 代码如下,请大家指点一下有什么问题:Chart.RemoveAllSeries;
         for   i:=0   to   cnt-1   do
          begin
             if CheckBoxAry[i].Checked=true then
              BEGIN
              BarSeries[i]:= TBarSeries.Create(Chart);
              BarSeries[i].ParentChart:=Chart;
              BarSeries[i].Color:= RandomColor;
              BarSeries[i].Marks.Visible:=false;
              TBarSeries(BarSeries[i]).MultiBar:=mbStacked;
              BarSeries[i].Title:=StrDept[i];           for j:=1 to sglist.ColCount-1 do
               begin
                  BarSeries[i].Add(StrToFloat(sgList.Cells[j,i+1]),sgList.Cells[j,0]);
               end;
             END;
          end;
      

  6.   

    我把代码调整了一下,还是不行。画chart还是没问题的,就是在主窗体关闭的时候报错,唉! BarSeries:=nil;
    Chart.RemoveAllSeries;
      for i:=0 to cnt-1 do
      begin
      if CheckBoxAry[i].Checked=true then
      BEGIN
              SetLength(BarSeries,k+1);
              BarSeries[k]:= TBarSeries.Create(Chart);
              BarSeries[k].ParentChart:=Chart;
              BarSeries[k].Color:= RandomColor;
              BarSeries[k].Marks.Visible:=false;
              TBarSeries(BarSeries[k]).MultiBar:=mbStacked;
              BarSeries[k].Title:=StrDept[i];       for j:=1 to sglist.ColCount-1 do
          begin
              BarSeries[k].Add(StrToFloat(sgList.Cells[j,i+1]),sgList.Cells[j,0]);
          end;
      END;
      end;
      

  7.   

    sgList.Cells[j,0]是什么?
    取单元格?
    什么控件的单元格?
    如果是Excel工作表的话那个0会导致报错!
      

  8.   

    stringgrid,那个没有问题。
    我新建一个project,然后把动态画图的代码应用过去,程序关闭时没有问题的。郁闷阿~~~~~
      

  9.   

    for i:=chart.SeriesList.Count-1 downto 0 do
            chart.Series[i].Free;加了上面一段就没问题了