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)       //分配的堆内存正常释放了吧?

解决方案 »

  1.   

    释放也会有问题,呵呵
    应该这样:
    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的位置一直没有变,保证正确释放