我刚刚学习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去掉,程序就不会出现错误,不知道是怎么回事,
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去掉,程序就不会出现错误,不知道是怎么回事,
解决方案 »
- 装了delphi7,为什么不能双击打开一个dpr文件
- 流中字符串的替换
- anyq 客户端编译不了!
- 请问QuickReport Master/Detail报表怎样做?。谢谢了!
- 枚举类型如何赋值!
- 那位大侠帮我修改下面这个程序啊,很简单的,就是数据库的增加删除功能(我只有30分了)
- Drawcell()在什么情况下被调用处理?
- 简单问题,在edit和label控件中如何是文字水平、上下居中?
- 急求帮助,使用Indy编写通信程序,服务器端使用ReadBuffer读出的数据不正确
- 关于数据库错误捕获。。。
- 客户端的RECV(..)的Tsocket参数怎么设置的!!!
- 如何避免Edit的onchange事件触发2次
dispose(integerr(p));试试这样行不行
dispose(p);
这个都可以去掉,
p:=list.items[0];
p指向的是list.items[0]; 你前边 New(p); 后边dispose(p); 释放的不是你前边NEW里创建的,而是list.items[0];
釋放內存時你必須告訴LIST釋入的內存大小,是一個結構類型還是一個數組,大小多少。這是必須的。