把指针赋值给数组句柄的一个小问题 ( 积分: 50 )

  • 主题发起人 主题发起人 QSmile
  • 开始时间 开始时间
Q

QSmile

Unregistered / Unconfirmed
GUEST, unregistred user!
把指针赋值给数组句柄的一个小问题
如:
var
buf:array of byte;
p:Pointer;
begin
GetMem(P,255);
Buf := p;
ShowMessage(IntToStr(Length(Buf)));
FreeMem(p);


这样显示的不是 255 可以 262
为什么??
 
把指针赋值给数组句柄的一个小问题
如:
var
buf:array of byte;
p:Pointer;
begin
GetMem(P,255);
Buf := p;
ShowMessage(IntToStr(Length(Buf)));
FreeMem(p);


这样显示的不是 255 可以 262
为什么??
 
var
buf:array of byte;
p:Pointer;
const
C_Length = 255;
begin
GetMem(P, C_Length);
SetLength(buf, C_Length);
CopyMemory(buf, P, C_Length);
ShowMessage(IntToStr(Length(Buf)));
FreeMem(p);
 
确实这样,不过你要实现什么功能呢

var
buf:array of byte;
p:Pointer;
begin
GetMem(P,255);
SetLength(P, 255);// 好像没用
Buf := p;
ShowMessage(IntToStr(Length(Buf)));
FreeMem(p);
 
cpj的代码有问题
[red]CopyMemory(buf, P, C_Length);[/red]
动态数组的首地址应该是@buf[0]
上面的代码应改为
[red]CopyMemory(@buf[0], P, C_Length)或move(p^,buf[0],C_Length);[/red]
 
ShowMessage(IntToStr(sizeof(Buf)));
这样行不行???
 
GetMem(P,255)
申请255字节内存,数据不确定
Buf:= p
将buf[0]的地址指向p
ShowMessage(IntToStr(High(Buf))+' '+IntToStr(Low(Buf)));
FreeMem(p);

问题在此:
buf是有数据结构的
buf[0]-4=06 10 00 00 =262 这肯定不是巧合,它记录着buf的上下限


管杀不管埋
 
你的程序很不安全
FreeMem(p)
其实是释放的Buf的数据部分
但程序退出时还会释放Buf,这时会出错
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
694
import
I
后退
顶部