procedure TFcomm.commsysReceiveData(Sender: TObject; Buffer: Pointer;  BufferLength: Word);
 var
 data:array [1..500]of  byte;
begin
  move(Buffer^,pbyte(@data)^,Bufferlength);
end;以上程序运转正常!可以读出数据,修改为动态数组,程序保内存错误!procedure TFcomm.commsysReceiveData(Sender: TObject; Buffer: Pointer;  BufferLength: Word);
 var
data:array  of  byte;
begin
  SetLength(data,BufferLength);
  move(Buffer^,pbyte(@data)^,Bufferlength);
end;请高手不吝赐教!

解决方案 »

  1.   

    Move访问array的时候,静态array可以直接使用,动态array要使用使用array[0]。因为动态array时数组名其实只是一个地址。你改为move(Buffer^,data[0],Bufferlength);或者按照你的写法试试move(Buffer^,pbyte(@data[0])^,Bufferlength);  //我认为是脱裤子放屁了,呵呵
      

  2.   

    嗯,阿泰说得对
    move(Buffer^,pbyte(@data[0])^,Bufferlength); @data[0]是动态数组的堆起始地址
    @data是一个间接栈地址
    你这样指可能会发生AV错误,即试图写入一个未经允许写入的地址,肯定会挂的。
    你的程序报的错误到底是什么?溢出还是非法访存或非法写入