我刚刚学习delphi的指针,用tlist类做了一个程序,发现用函数dispose释放内存,出现错误,代码如下:
program tlis;{$APPTYPE CONSOLE}uses
  SysUtils,Classes;
 var
   i,b,c:Integer;
   p:PInteger;
   list:TList;
begin
  i:=100;
  b:=200;  list:=TList.Create;
          New(p);
  list.Count:=10;
  list.Items[0]:=@i;
   p:=list.items[0];
      Writeln(p^);
   c:=list.Add(@b);
   p:=list.Items[c];  Writeln(p^);
dispose(p);  //出现错误,错误提示Invalid Pointer Operation,
  list.Free;  Readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
 如果把dispose去掉,程序就不会出现错误,不知道是怎么回事,

解决方案 »

  1.   

    编译器不会知道你的Data的原来是什么类型的指针的,必须显式告诉编译器
    dispose(integerr(p));试试这样行不行  
      

  2.   

     New(p); 
    dispose(p);
    这个都可以去掉, 
    p:=list.items[0]; 
    p指向的是list.items[0]; 你前边 New(p);  后边dispose(p); 释放的不是你前边NEW里创建的,而是list.items[0]; 
      

  3.   


     釋放內存時你必須告訴LIST釋入的內存大小,是一個結構類型還是一個數組,大小多少。這是必須的。