代码如下:
procedure TfrmMain.aClosePageExecute(Sender: TObject);
begin
    if pcPages.ActivePageIndex <> -1 then
    begin
        pcPages.ActivePage.Free;
        //pcPages.ActivePage:=nil;
        //pcPages.activepageindex:=pcPages.pagecount-1;
    end;
end;pcPages.ActivePage.Free之后就报内存错误了。

解决方案 »

  1.   

    内存访问越界
    这个ActivePage里都有什么,Free时发生了什么
    跟一下
      

  2.   

    如果是TPageControl的话代码这里没错。应该看看你还做了什么事情
      

  3.   

    pcPages.ActivePage.Free可能是你这里面释放了不该释放地内容
      

  4.   

    这个问题我大概知道原因,因为这是一个事件,可能在执行事件后,PAGE CONTROL本身还有代码要调用这个PAGE的代码,因此你在里面把PAGE释放了就出错了。想想为什么FORM CLOSE要设置caFree而不是直接就把FORM给释放调就明白了。但是解决方法没想好,以前我是用PostMessage来解决的。
      

  5.   

    TPageControl的所有页其实是一个组件数组,
    和普通数组一样,统一申请,统一释放,
    你要把数组的某一个元素的内存地址释放掉,
    当然不能了
      

  6.   

    pcPages.ActivePage.Free我不知道你为什么要把激活的这页给free,没必要这样子吧,pagecontrol总是要有一个ActivePage吧,要不然你就直接pcPages.ActivePageIndex 设置成你默认的那个就行了啊
      

  7.   

    你是不是在tabsheet的destroy里面free了tabsheet里面的那些控件了?
    不用free,直接pcPages.ActivePage.Free就可以了 
      

  8.   

    楼主做个timer调用pcPages.ActivePage.Free就可以了;
    procedure TfrmMain.aClosePageExecute(Sender: TObject); 
    begin 
        if pcPages.ActivePageIndex <> -1 then 
        begin 
            Timer1Timer(Timer1);
            //pcPages.ActivePage.Free; 
            //pcPages.ActivePage:=nil; 
            //pcPages.activepageindex:=pcPages.pagecount-1; 
        end; 
    end; 
    procedure TMAINFORM.Timer1Timer(Sender: TObject);
    begin
      Timer1.Enable:= False;
      pcPages.ActivePage.Free; 
    end;
      

  9.   

    写错了。
    procedure TfrmMain.aClosePageExecute(Sender: TObject); 
    begin 
        if pcPages.ActivePageIndex <> -1 then 
        begin 
            Timer1.enabled:= True; 
            //pcPages.ActivePage.Free; 
            //pcPages.ActivePage:=nil; 
            //pcPages.activepageindex:=pcPages.pagecount-1; 
        end; 
    end;