Move 问题 ( 积分: 100 )

  • 主题发起人 主题发起人 fanronghua
  • 开始时间 开始时间
F

fanronghua

Unregistered / Unconfirmed
GUEST, unregistred user!
TArrayByte = array of Byte;

var
SendData: array[0..2 * DATABUFF - 1] of byte;
TempArrayData: TArrayByte;
begin
move(TempArrayData^, pchar(@SendData)^, length(TempArrayData));//这里不对
ClientS.Socket.SendBuf(SendData, length(TempArrayData));
 
TArrayByte是什么?
有多长?TempArrayData和SendData哪个空间小Move最后的参数就用哪个。
 
move(a^,b^,sizeOf(a));
把a指针的内容复制到b指针指向的地方。
在你的实现中,TempArrayData是一个动态数组,没有进行过初始化,TempArrayData指针指向一个不可预知的内存块。
 
先为TempArrayData分配空间
SetLength(TempArrayData, 2 * DATABUFF)
 
SetLength(TempArrayData, 长度);
move(TempArrayData[0], pchar(@SendData)^, length(TempArrayData));//
 
TArrayByte = array of Byte;

var
SendData: array[0..2 * DATABUFF - 1] of byte;
TempArrayData: TArrayByte;
begin
SetLength(TempArrayData, xxxx); //申请空间
//
//给TempArrayData的各个元素赋值
//
move(TempArrayData[0], SendData, length(TempArrayData));//这里不对

//觉得奇怪,为何不直接访问SendData呢?没有必要通过TempArrayData中转

ClientS.Socket.SendBuf(SendData, length(TempArrayData));
 
接受答案了.
 

Similar threads

后退
顶部