PMyrcd = ^TMyrcd;
TMyrcd = record
n: integer;
s: String;var
prcd: PMyrcd;
procedure TTT;
GetMem(prcd, sizeof(prcd));
prcd.s;  // 此句报错顺便问一下如果record里面有Tlist类型用new能分配么

解决方案 »

  1.   

    如果是记录或者固定大小的数组,则应该用New来分配内存!
    上面的代码修改如下试试:
    PMyrcd = ^TMyrcd;
    TMyrcd = record
    n: integer;
    s: String;var
    prcd: PMyrcd;
    procedure TTT;
    New(prcd);
    prcd.s;  // 此句报错
      

  2.   

    记得最后用Dispose(prcd)来释放内存。
      

  3.   

    GetMem和AllocMem很像
    分配连续空间,用于字符串和缓冲区的,不是分配对象用的
      

  4.   

    》顺便问一下如果record里面有Tlist类型用new能分配么对的,用New() 分配
      

  5.   

    还是 ly_liuyang(Liu Yang) 
    回答的好
      

  6.   

    我试了一下发现New可以为含有class的分配内存。getmem太有限了
      

  7.   

    GetMem是分配动态内存用的,静态的用New,就是这样!
    还有,由GetMem分配的内存是未初始化的。要用Initialize或FillChar来设置该内存为0;
      

  8.   

    我的用法有问题。getmem里面第二个参数不对应该为sizeof(TMyrcd)这样才不会错。