有些不对。
只要
new(b)就可以了。a不用New,因为声明的时候已经分配了内存。
var
b:^TB;
begin
new(b);
b^.data.i := 1;
b^.j := 2;
globalList.add(b);
end; 另外,Delphi只有New(b),没有你说得New(PB)的语法。
只要
new(b)就可以了。a不用New,因为声明的时候已经分配了内存。
var
b:^TB;
begin
new(b);
b^.data.i := 1;
b^.j := 2;
globalList.add(b);
end; 另外,Delphi只有New(b),没有你说得New(PB)的语法。
改成现在的样子才能执行。关于b=New(PB)确实没有这样的语法,可是D6自带的demo里面有这样的语句,编译运行也没有问题。
b=New(PB)。
刚才我在D5中试了,编译器根本就不通过。
而且上面的
new(a);
dispose(a);
均不能通过编译。难道D6那么违背常理吗?我再看看。
在demos\virtual listview里面就有这样的语句,ShellItem := New(PShellItem)。
a:TA,new(a),dispose(a)都不能通过?
在demo\db\dbxexplorer里面也有
PFieldData = ^TFieldData;
TFieldData = record
Field: TField;
NewValue: string;
OldValue: string;
CurValue: string;
EditValue: string;
Edited: Boolean;
end;FD := New(PFieldData);
FD := New(PFieldData);怎么来的?
还有,data的内容经常非法存取,debug发现内存分配不太正常……