function Str2Byte(param1: String): TBytes;
var
  n: DWORD;
begin
  n := Length(param1);
  SetLength(Result, n);
  move(param1[1], Result[0], n);
end;过程结束后,这个result的空间释放了吗?

解决方案 »

  1.   

    没有,返回了一个指针TBytes = array of Byte;
    var
      A: TBytes;
      Str: string;
    begin
      A := Str2Byte('test');
      SetLength(Str, High(A) + 1);
      Move(str[1], A[0], High(A) + 1);
      ShowMessage(Str);
    end;
      

  2.   

    这个是看情况的, 主要是你需要掌握delphi生存期管理的方式, 不要被delphi玩, 而应该玩好delphi, 例如你要问的问题在函数内部result占用的空间是不会释放的,但是由于动态数组是delphi自动管理生命周期的,当这个数组无人引用的时候delphi会自动释放掉这段空间,所以你就大胆的使用好了
      

  3.   

    返回值类似于out类型的参数,生命周期是外部调用函数负责。
      

  4.   

    自己跟了下frmMain.pas.150: data := Str2Byte('123');
    004A0131 8D55FC           lea edx,[ebp-$04] //edx = @data,把data的内存地址作为参数给了Str2Byte
    004A0134 B888014A00       mov eax,$004a0188
    004A0139 E8F28EFCFF       call Str2Byte //里面直接使用[edx]也就是data做为move的参数所以自己管理好data就行了