分配内存用new(p)
释放时用dispose(p),试试看
读的时候:
puserinfo(p)^.username
...
应该可以
释放时用dispose(p),试试看
读的时候:
puserinfo(p)^.username
...
应该可以
解决方案 »
- 在三层构架中用TClientDataSet来更新数据库时,怎么就只能更新一条记录吗?
- 帮帮忙,怎样用IWTreeView控件读取后台数据啊
- 如果做行业软件,像什么ERP,MIS……,做哪方面的最赚钱?
- 请问有没有在播放MP3时显示其波形图的控件?
- 为什么无法改变QR的纸张设置,预览时总是A4界面?
- 请问如何使用程序代码来实现修改注册表的操作?
- 怎样才能将报表(或窗体上的某个区域)保存为图片???急,给点想法。
- 我试了“夸克”那个移动控件的代码,但只见鼠标指针变化,不见控件移动啊。怎么回事??大家帮帮我,小弟好急的!!!!
- 如何判断一个窗口已经创建
- 如何把Button变成平的
- 关于数据库的数据类型的问题
- 好东西一起分享,不要错过阿!
pl:pchar;
getmem(p,sizeof(tuserinfo));
p.username:='kkk';
p.HeadIcon:=65;
p.sockethandle:=65;
showmessage(inttostr(sizeof(tuserinfo)));
showmessage(inttostr(sizeof(p)));
pl:=pchar(P);
while true do
begin
showmessage(pchar(pl)^);
pl:=pchar(pl)+1;
end;
freemem(p);就可以看到内容了为什么不能用
freemem 我还没有找到答案
在freemem前加上
buf:=nil;因为此时buf指的地方仍有引用,如:p
不能直接释放
buf:=pchar('$;@'+pchar(P));//你把一个指针传给了buf,那么你分配的
那块内存地址怎么找的回来?
好像是白分配了
showmessage(pchar(buf));这样如何?var
buf:pointer;
p:puserinfo;
begin
getmem(p,sizeof(tuserinfo));
p.username:='kkk';
p.HeadIcon:=44;
p.sockethandle:=43;
// getmem(buf,sizeof(tuserinfo)+3);
buf:=pchar('$;@'+pchar(P));
showmessage(pchar(buf));
// freemem(buf); //为什么不能free,我想把buf中的userinfo读出来又该怎么做
freemem(p);
end;
TName=array[0..9] of char;
PuserInfo=^TUserInfo;
TUserInfo=record
UserName:tname;
HeadIcon:byte;
SocketHandle:Integer;
end;procedure TForm1.Button1Click(Sender: TObject);
var
buf:pointer;
p,p1:puserinfo;
f,f1:^tname;
begin
getmem(p,sizeof(tuserinfo));
getmem(buf,sizeof(tuserinfo)+10); f:=buf;
f^:='hi delphi ';
p:=ptr(longint(buf)+10);
p.username:='Mydelphi';
p.HeadIcon:=44;
p.sockethandle:=43; p1:=ptr(longint(buf)+10);
f1:=buf; showmessage('buf='+pchar(buf));
showmessage('f1='+f1^);
showmessage('p.username='+p1.UserName);
showmessage('p.headicon='+inttostr(p1.headicon));
showmessage('p.sockethandle='+inttostr(p1.sockethandle));
freemem(buf);
end;
这样才是真正用到了分配给buf的内存,当然可以释放了.
以前那样,根本不用给buf分配空间的,代码中就没有用到分配的空间.buf:=pchar('$;@'+pchar(P));//这句后.这块分配的内存就再也找不到了,呵呵
2、你不能用“buf := ”去改变buf指向的内容,这样只能让它重新指向另一片存储区(在这一段程序中,应该是一个临时分配的存储区),你应该复制内存:
StrLCopy( PChar(buf), '$;@' );
MemMove( p^, PChar(buf)^, sizeof(TUserInfo) );读出buf中的TUserInfo: PUserInfo(buf+3)^
http://www.csdn.net/expert/topic/939/939025.xml?temp=1.676577E-02