有些不对。
只要
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)的语法。

解决方案 »

  1.   

    我原来的代码就是这样的,但是执行时总告诉我地址不可访问……而且debug时,光标移到data处,显示inaccessable。
    改成现在的样子才能执行。关于b=New(PB)确实没有这样的语法,可是D6自带的demo里面有这样的语句,编译运行也没有问题。
      

  2.   

    我第一次听说。
    b=New(PB)。
    刚才我在D5中试了,编译器根本就不通过。
    而且上面的
      new(a); 
      dispose(a);
    均不能通过编译。难道D6那么违背常理吗?我再看看。
      

  3.   

    D6也不行。我不知道你的D6为什么可以?反正new(a)肯定违背了Pascal的语法。
      

  4.   

    你的D6也不行?我的版本是Enterprise Build 6.163。
    在demos\virtual listview里面就有这样的语句,ShellItem := New(PShellItem)。
    a:TA,new(a),dispose(a)都不能通过?
      

  5.   

    new(a)确实不能通过,我写错了,应该是a:^TA。
    在demo\db\dbxexplorer里面也有
      PFieldData = ^TFieldData;
      TFieldData = record
        Field: TField;
        NewValue: string;
        OldValue: string;
        CurValue: string;
        EditValue: string;
        Edited: Boolean;
      end;FD := New(PFieldData);
      

  6.   

    问题多多呀……
    FD := New(PFieldData);怎么来的?
    还有,data的内容经常非法存取,debug发现内存分配不太正常……
      

  7.   

    New可以这样吗?我记得New是Procedure,不是Function。
      

  8.   

    问题是demo里面有,而且可以编译运行。至少我这里可以……另一个问题解决了。大概D6有bug,同样的程序,昨天还不行,放了一晚上就一切正常了。简直#$%@#$#$@^$………………