我在程序中定义了如下结构type
    PTThreadStruct = ^TThreadStruct;
    TThreadStruct = record
        MSendBuf            :Pointer;    
        MStream             :TMemoryStream;    
end;再定义如下动态数组
PRT_ThreadStruct    :array of PTThreadStruct;         在窗体打开后 
    setlength(PRT_ThreadStruct,2)
    For i:= 1 to   2 do
    begin               New(PRT_ThreadStruct[i]);
               GetMem(PRT_ThreadStruct[i].MSendBuf ,1024);
               PRT_ThreadStruct[i].MStream := TMemoryStream.Create ;    end;
在关闭窗体前我对动态组也做了释放,关闭程序时老是提示无效的指针操作
我将动态数组改为
PRT_ThreadStruct    :array[1..2] of PTThreadStruct;    
程序就不会报错了,请问是什么原因啊?答对马上揭帖

解决方案 »

  1.   

    完整代码如下:procedure TForm1.Button1Click(Sender: TObject);
    begin
        setlength(PRT_ThreadStruct,2)
        For i:= 1 to   2 do
        begin               New(PRT_ThreadStruct[i]);
                   GetMem(PRT_ThreadStruct[i].MSendBuf ,1024);
                   PRT_ThreadStruct[i].MStream := TMemoryStream.Create ;    end;end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        For i:= 1 to   2 do
        begin
            freeMem(PRT_ThreadStruct[i].MSendBuf);
            PRT_ThreadStruct[i].MStream.free ;
            PRT_ThreadStruct[i].MStream:= nil;
            Dispose(PRT_ThreadStruct[1]);
            PRT_ThreadStruct[1] := nil;
        end;
    end;
    先单击button1,再单击button2,关闭程序,就会报错!
     zswangII(伴水清清)你去试试,谢谢了!
      

  2.   

    //是否声明顺序有问题?改如下试试,不行不要骂我丫。
    type
        TThreadStruct = record
            MSendBuf            :Pointer;    
            MStream             :TMemoryStream;    
        end;
        PTThreadStruct = ^TThreadStruct;
      

  3.   

    button1中:For i:= low(PRT_ThreadStruct) to high(PRT_ThreadStruct) do
    button2中:For i:=high(PRT_ThreadStruct) downto low(PRT_ThreadStruct) do
      

  4.   

    To : gwolf(阿呆)   确实不报错了,是啥原因啊?
      

  5.   

    我调试了一下:
    button1中:For i:= low(PRT_ThreadStruct) to high(PRT_ThreadStruct) do 
    实际是从0到1
    button2中:For i:=high(PRT_ThreadStruct) downto low(PRT_ThreadStruct) do
    是从1到0但是我如果将他们改为
    for i:=1 to 2
    就会报错,难道动态数组只能从0开始?
      

  6.   

    动态数组的下标问题,偶也一知半解,使用low()和high()是安全的方法