PPchar=^Pchar;procedure GetMemory(P:PPchar;Num:integer);procedure TForm1.getmemory1(P:PPchar;Num:integer);
var
  PP:Pchar;
begin
  pp:=Pchar(AllocMem(sizeof(integer)*Num));
  ^P:=PP;
end;procedure TForm1.Button1Click(Sender: TObject);
var
  test:Pchar;
begin
  GetMemory(@test,100);
  //test:=Pchar('121');
  //ShowMessage(test);
  FreeMem(test);
end;释放的时候报读非法内存错误!

解决方案 »

  1.   

    错在^P:=PP;
    应该为P^:=PP;^P是PPPChar了,P^是PChar型的
      

  2.   

    procedure GetMemory( var P:PPchar;Num:integer);
      

  3.   

    procedure getmemory1(var P:PPchar;Num:integer);
    var
      PP:Pchar;
    begin
      pp:=Pchar(AllocMem(sizeof(integer)*Num));
      P^:=PP;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      test:Pchar;
    begin
      getmemory1(@test,100);
      //test:=Pchar('121');
      //ShowMessage(test);
      FreeMem(test);
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      test:Pchar;
    begin
      GetMemory(test,100);
      //test:=Pchar('121');
      //ShowMessage(test);
      FreeMem(test);
    end;
      

  5.   

    应该是
      Getmem(test,100);  FreeMem(test);
      

  6.   

    ouyhjames007(笑傲天下)说得对!
      

  7.   

    1 procedure GetMemory(P:PPchar;Num:integer);怎么实现的
    2 procedure TForm1.getmemory1(P:PPchar;Num:integer);似乎没有调用过啊
      

  8.   

    老大,你不过就是想给PChar分配空间吗!用得着自己写吗?
    var
      p :pchar;
    begin
      p :=StrAlloc(100); //给p分配100个字节
      StrDispose(p);     //释放p的内存空间。
    end;  //搞定。