正确的代码:  
  s := 'A B';
  len:= length(s);
  setlength(ary,length(s));
  copymemory(@ary[0],@s[1],length(s));
  ShowMessage(ary[0]);
  copymemory(@ary[1],@s[2],length(s));
  ShowMessage(ary[1]);
  copymemory(@ary[2],@s[3],length(s));
  ShowMessage(ary[2]);
  for i:=0 to len-1 do
  begin
     Str:=Str+ary[i];
  end;
  ShowMessage(Str);
出错的代码:  
  s := 'A B';
  len:= length(s);
  setlength(ary,length(s));
  copymemory(@ary[0],@s[1],length(s));
  //ShowMessage(ary[0]);
  copymemory(@ary[1],@s[2],length(s));
  //ShowMessage(ary[1]);
  copymemory(@ary[2],@s[3],length(s));
  //ShowMessage(ary[2]);
  for i:=0 to len-1 do
  begin
     Str:=Str+ary[i];
  end;
  ShowMessage(Str);
两者的唯一区别就是一个有ShowMessage一个没有,有ShowMessage的没出错,另一个出错,出错信息是Invalid Pointer Operation。请问是什么原因?

解决方案 »

  1.   

    正确的代码:  
      s := 'A B';
      len:= length(s);
      setlength(ary,length(s));
      copymemory(@ary[0],@s[1],length(s));
      ShowMessage(ary[0]);
      copymemory(@ary[1],@s[2],length(s));
      ShowMessage(ary[1]);
      copymemory(@ary[2],@s[3],length(s));
      ShowMessage(ary[2]);
      for i:=0 to len-1 do
      begin
         Str:=Str+ary[i];
      end;
      ShowMessage(Str);
    出错的代码:  
      s := 'A B';
      len:= length(s);
      setlength(ary,length(s));
      copymemory(@ary[0],@s[1],length(s));
      //ShowMessage(ary[0]);
      copymemory(@ary[1],@s[2],length(s));
      //ShowMessage(ary[1]);
      copymemory(@ary[2],@s[3],length(s));
      //ShowMessage(ary[2]);
      for i:=0 to len-1 do
      begin
         Str:=Str+ary[i];
      end;
      ShowMessage(Str);
    两者的唯一区别就是一个有ShowMessage一个没有,有ShowMessage的没出错,另一个出错,出错信息是Invalid Pointer Operation。请问是什么问题?