用STRING太多了。PCHAR太不熟悉。为什么下面这个句子有时可以有时不可以呢?var
  P: PChar;
begin
  P:= AllocMem(1024);
  ASSERT(P = nil);
  FreeMem(P);
end;

解决方案 »

  1.   

    var
      P: PChar;
    begin
      P:= AllocMem(1024);
      ASSERT(P <> nil);
      FreeMem(P);
    end;
    应该就可以了!
      

  2.   

    个人觉得将
    P:= AllocMem(1024);
    改成
    GetMem(P, 1024);
      

  3.   

    用 
    ASSERT(P = nil);
    目的是什么,var
      P: PChar;
    begin
      GetMem(P,1024);
      //P:= AllocMem(1024);
      FreeMem(P);
    end;
      

  4.   

    //GetMem() 和 AllocMem() 差别不大,AllocMem多了一个清零的过程~~
    function AllocMem(Size: Cardinal): Pointer;
    begin
      GetMem(Result, Size);
      FillChar(Result^, Size, 0);
    end;//ASSERT(P = nil);这个断言的条件设置反了吧~~
      

  5.   

    ////////////////////////
    PChar是一个指针类型;
    可以用GetMem和AllocMem给它分配内存;
    用FreeMem释放内存;
      

  6.   

    ASSERT那句,就是为检测。我主要要问的是,为什么有时AllocMem能分配到内存有时不行呢?郁闷。