首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于指针拷贝的疑惑.该如何处理

2012-02-26 
关于指针拷贝的疑惑....代码如下:Delphi(Pascal) code//这段代码在ontest中可以正常接收到发过来的信息pro

关于指针拷贝的疑惑....
代码如下:

Delphi(Pascal) code
//这段代码在ontest中可以正常接收到发过来的信息procedure TForm1.btn1Click(Sender: TObject);  var pdata :array[0..4] of Byte  ;      i : Integer;begin    FillChar(pdata,5,0);  for i := 0 to 4 do  begin    pdata[i] := i * 10;  end;  PostMessage(Handle,WM_TEST,5,LongWord(@pdata[0]));end;procedure TForm1.OnTest(var Msg: TMessage);  var pd : array[0..4] of Byte;      i : Integer;begin  CopyMemory(@pd[0],Pointer(Msg.LParam),5);  for i := 0 to Msg.WParam - 1 do  begin    ShowMessage(IntToStr(pd[i]));  end;end;//下面代码也可以正常接收,只是showmessage后会报错,不知什么原因procedure TForm1.btn1Click(Sender: TObject);  var pdata :pByte ;      i : Integer;begin  GetMem(pdata,5);  FillChar(pdata^,5,0);  for i := 0 to 4 do  begin    pdata^ := i * 10;    inc(LongWord(pdata),1);  end;  inc(LongWord(pdata),-5);  SendMessage(Handle,WM_TEST,5,LongWord(@pdata));  FreeMem(pdata,5);end;procedure TForm1.OnTest(var Msg: TMessage);  var pd : pByte;      i : Integer;      aa : TBitmap;begin  CopyMemory(@pd,Pointer(Msg.LParam),5);//拷贝正常,执行完毕报错  //Move(Pointer(Msg.LParam)^,(@pd)^,5);//正常  for i := 0 to Msg.WParam - 1 do  begin    ShowMessage(IntToStr(pd^));    if i < Msg.WParam - 1then     Inc(LongWord(pd),1);  end;end;


哪位达人解释一下
另外 能不能通过 InterlockedExchange 这个PAI直接为pd指向一个地址?

[解决办法]
CopyMemory(@pd,Pointer(Msg.LParam),5);//拷贝正常,执行完毕报错

pd没分配空间

pd = AllocMem(SizeOf(Byte)*5);

热点排行