还是关于指针,该怎么解决

还是关于指针
type
  Puser = ^TUser;//用户信息
  TUser = packed record
    UserId:string;
    username: string;
  end;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var user:Puser;
begin
  GetMem(user,sizeof(user));
   user.UserId := 'aabb';
   ShowMessage(user.UserId);访问方式A
   ShowMessage(user^.UserId);访问方式B
   user^.UserId := 'ssss';
   ShowMessage(user.UserId);
   ShowMessage(user^.UserId);
   FreeMem(user);
end;
A和B都可以设置USERID的值,两种访问有什么区别?
或者说什么情况下用第一种访问方式?什么情况用第二种?
------解决方案--------------------
个人写法习惯,记录没有^,记录指针可有可无
记录指针没加的时候编译器会帮你加上,所以最好是加上^,方便辩认是指针类型

------解决方案--------------------
嗯   delphi 中的类  T** =class  其实也是指针,但是也是用个点 来实现的. 这点感觉上不够严谨
------解决方案--------------------
楼主代码有问题。
1. GetMem(user,sizeof(user));
应当是SizeOf(TUser),你的sizeof(user)是4而不是8,你看看。

2. 在FreeMem之前,应当调用user^.UserId:=''来释放掉字符串,不然会造成内存泄漏。
可以使用New和Dispose来代替GetMem和FreeMem,这样就不用手动释放字符串了。