先是定义了这样一个记录,和一个记录的指针结构
  RProduct = record
    SDeInfoID :integer;
    KeyId :integer;
    SDeInfoAdd:string;
  end;
  TPRProduct = ^RProduct;这样使用  pProduct:TPRProduct;
  pRProduct:RProduct;
  List:TStringList;   for i:=0 to 10 do
   begin
     GetMem(pProduct, SizeOf(RProduct));
     pRProduct:= pProduct^;
     pRProduct.SDeInfoAdd:='AAAAA';  ////这句经常会报错,不知道是为什么
     List.Add(pProduct);
   end;请教一下高人

解决方案 »

  1.   

    GetMem(pProduct, SizeOf(RProduct));改为new(pProduct)试试
      

  2.   

    改为new后可以啦,弱弱的问一下GetMem 和new有什么不一样,
    另外GetMen用FreeMem释放,那New后应该怎样去释放啊?
      

  3.   

    getmem只是分配一个指定大小的内存块。
    new会为一个指针变量分配内存,会自动计算指针所指数据结构需要空的空间大小。实际上看new的源程序,其中用到了getmem,同时执行了一些初始化的操作。new以后用dispose释放
      

  4.   

    RProduct = record
      SDeInfoID :integer;
      KeyId :integer;
      SDeInfoAdd:string;
     end;使用 GetmMem, 
    SDeInfoAdd:string; 要改成 SDeInfoAdd:string[255]; 这样的 
      

  5.   

    GetMem(prec)后FillChar(prec^, SizeOf(prec^), 0)就可以了,New的效率差。
      

  6.   

    getmem只是分配一个指定大小的内存块。
    new会为一个指针变量分配内存,会自动计算指针所指数据结构需要空的空间大小GetMem(prec)之後FillChar(prec^, SizeOf(prec^), 0);
      

  7.   

    另外这里还有个问题,也请帮忙一下
    http://topic.csdn.net/u/20100817/08/7619229d-2bce-466b-a08a-56fc29c1aa72.html