疑问一:结构体1
type
  PTRecTest = ^TRecTest;
  TRecTest = record
  iAge:Integer;
  sName:array[0..29] of char;
end;结构体2
type
  TRecTest = record
  iAge:Integer;
  sName:array[0..29] of char;
end;
PTRecTest = ^TRecTest;这结构体1和结构体2有何区别?疑问二:
结构体的内存申请与释放
procedure Test;
var
 PRecTest:PTRecTest;
begin
 new(PRecTest);
 PRecTest.iAge:=11;
 PRecTest.sName:='MyName';
 dispose(PRecTest);
end;
貌似这样没有问题,但是在有些函数里面显示的调用dispose(PRecTest)这句就会发生内存泄漏,比如把Test放到子线程中执行如果还是用dispose(PRecTest)的话就出现内存泄漏错误导致程序退出,用fastmm进行检查确实是发现UnKnown,这是为何?
像这样的:
var
 PRecTest:PTRecTest;
 什么时候显示调用dispose(PRecTest);什么时候不用显示调用dispose(PRecTest);

解决方案 »

  1.   

    像这样的应该怎么样释放?
    procedure Test;
    var
     PRecTest:PTRecTest;
    begin
     new(PRecTest);
     PRecTest.iAge:=11;
     PRecTest.sName:='MyName';
     //...锁
     ThreadList.addobject('',pointer(PRecTest));//ThreadList:Tstringlist;
     //...解锁
     //ThreadList是在线程中处理,这里只是添加对象数据
     dispose(PRecTest);//一定出错,应该怎么释放?
    end;
      

  2.   

    case5166
     哪里来的.Free,你在骗小孩呢?
      

  3.   

      FreeMem(PRecTest,SizeOf(PRecTest^));//这样也出错导致程序退出
      FreeMemory(PRecTest);这样还是出错导致程序退出。
      

  4.   

    老大,你这问题数据和你的问题分数严重不太对应,刚上班忙。没细看指针是用dispose进行释放的。难道是你线程中还在使用这个地址?
      

  5.   

    说实在的我很鄙视你case5166这样的人,看看kaikai_kk多爽快!觉得问题和问题分数严重不太对应,我的总积分只有那么多了!即使你懂那你可以不用高抬贵手来搭理我的问题,这是你的权利你的意愿。大街上少个乞丐,还是会热热闹闹的 哈哈!问题已经自己搞定了,数据太多自己把自己弄晕了。
      

  6.   

    靠,这就是你求学的态度啊,我不是说了“刚上班忙。没细看”,我随便说了句老大,“你这问题数据和你的问题分数严重不太对应”你还真以为你是老大了.而且我有说错?指针不是用指针是用dispose进行释放?