首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-01-25 
还是关于指针typePuser ^TUser//用户信息TUser packed recordUserId:stringusername: stringendty

还是关于指针
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,这样就不用手动释放字符串了。

热点排行