var
x:integer;
p:^integer;
begin
x:=20;
new(p);
p:=@x;
if p<>nil then
showmessage(IntToStr(p^));
dispose(p);
end;运行出现“Invalid pointer operation”
当将p:=@x改为p^:=20就可以了。为什么p:=@x时,使用dispose(p)是错误的,如何改正。
x:integer;
p:^integer;
begin
x:=20;
new(p);
p:=@x;
if p<>nil then
showmessage(IntToStr(p^));
dispose(p);
end;运行出现“Invalid pointer operation”
当将p:=@x改为p^:=20就可以了。为什么p:=@x时,使用dispose(p)是错误的,如何改正。
解决方案 »
- 请问,怎么把DBGrid中的最后一行的某一列的值改变
- 请问wwDBLookup是什么控件组来的?
- 有谁用过LeadTools V14? 急!!!
- 如何不让mid窗体重复显示
- 怎样播放AVI和GIF两种格式的文件?
- 急!!!!!多次运用recordcount时为什么的到的是-1,在线等!!!!!!
- 传奇外挂中文脚本或触发器实现的原理
- 我的程序完了,装的是98,今天删了声音设备,系统出故障了,每次启动都检测声卡,而且都出现死机,只能进安全模式。请问各位高手怎样设置
- 哪里有Delphi安裝程序下載﹖謝了﹗
- Delphi初学者请教循环问题!详情请进,重谢!
- 为什么我的DELPHI里没有controbar控件
- 急!在线等待,有没有TREEVIEW添加,删除,修改的源码?使修改后的结果返回到数据库中!
dispose出错的原因是x是一个整型变量,它的空间是在栈上分配的,在每次调用这个函数的时候语言进行空间分配,在返回时自动释放的。把p指向这个栈空间的一个值后dispose,因为这段地址不应该由程序中的代码进行分配,所以出错
dispose(p);实际上是释放x所占用的内存。由于x并不是在堆上分配的内存,所以释放该内存会出错,同时会出现内存泄漏,即new(p)所申请的内存没有释放。用p^:=20时,即真正地将p指向的内容赋值。而dispose(p);则是将该内存释放,因此是正确的。