var
P:Pbyte; //首先申明一个Pbyte指针;
i:integer;
......
GetMem(P,5) //在堆内存上分配5个字节空间;for i:=1 to 10 do
begin
P^=$30+i;
inc(p); //当i=6时就在在分配的空间外进行访问,这样会有什么问题吗发生?
end;
......
dec(P,10)
FreeMem(P) //分配的堆内存正常释放了吧?
P:Pbyte; //首先申明一个Pbyte指针;
i:integer;
......
GetMem(P,5) //在堆内存上分配5个字节空间;for i:=1 to 10 do
begin
P^=$30+i;
inc(p); //当i=6时就在在分配的空间外进行访问,这样会有什么问题吗发生?
end;
......
dec(P,10)
FreeMem(P) //分配的堆内存正常释放了吧?
应该这样:
var
P:Pbyte; //首先申明一个Pbyte指针;
pTemp:PByte; //再声明一个临时指针;
i:integer;
......
GetMem(P,5) //在堆内存上分配5个字节空间;
pTemp := P;for i:=1 to 10 do
begin
P^=$30+i;
inc(pTemp);
end;
......
dec(PTemp,10)
FreeMem(P) //P的位置一直没有变,保证正确释放