关于指针的释放

SmallMaker 2006-08-24 12:09:13
我想new一个指针,然后将该指针的地址做为变量传递到另一个过程中,
我能否根据得到的地址将new出来的指针释放掉
...全文
228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmallMaker 2006-08-24
  • 打赏
  • 举报
回复
type
pMyrec=^Myrec;
Myrec=record
x:integer;
y:string;
end;

pro1 xxxx();
var
p:pMyrec;
begin
new(p)
...
pro2(LongInt(@p));
...
end;

procedure pro2 (xx:longint)
begin
....
end;

请楼上的在pro2中给我释放一下p
sunnysmile 2006-08-24
  • 打赏
  • 举报
回复
当然可以了
OO_is_just_P 2006-08-24
  • 打赏
  • 举报
回复
可以,Dispose就可以了。
OO_is_just_P 2006-08-24
  • 打赏
  • 举报
回复
那就强制类型转换就行了.
SmallMaker 2006-08-24
  • 打赏
  • 举报
回复
我想要的是只传递一个整型的地址,就将new(p),出来的p给释放掉!
OO_is_just_P 2006-08-24
  • 打赏
  • 举报
回复
var
Form1: TForm1;
point :Pointer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var p:pMyrec;
begin
New(P);
point :=p;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DisposeP(point);
end;

procedure TForm1.DisposeP(p: pMyrec);
begin
if p<>nil then
Dispose(P);
P :=nil;
end;

你自己注意检查。
OO_is_just_P 2006-08-24
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var p:pMyrec;
begin
New(P);
end;

procedure TForm1.DisposeP(p: pMyrec);
begin
if p<>nil then
Dispose(P);
end;
SmallMaker 2006-08-24
  • 打赏
  • 举报
回复
我的本意是通过消息传送一个指针,接收到消息后,进行处理,然后将该指针释放
现在我是通过消息传送了指针的地址,接收到之后我能正确地读取指针的内容,但是我无法释放该指针
muroachanf 2006-08-24
  • 打赏
  • 举报
回复
procedure pro2 (xx:longint)
begin
Dispose(Pointer(Pointer(xx)^));
end;

你直接传指针本身就好了,最好不要这么传,会有问题的,另外,不要跨模块,比如在dll1中new,在dll2中释放,那就会有问题的.
yyfhz 2006-08-24
  • 打赏
  • 举报
回复
可以告诉我为什么要在pro2中释放p吗?你释放了但是外面程序还不知道,估计跑起来会爆出一堆的地址错误,一般是在哪里申请就在哪里释放的。
一定要做的话,可以在proc2中将xx强制类型转换成pMyrec再释放。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧