procedure TestProc;
var
  TestS: PChar;
begin
  AllocMem(TestC, 7);
  TestC := 'A Test'#0
  MessageBox(0, TestC, TestC);
  FreeMem(TestC);
end;这个代码有问题吗?问题在哪里?

解决方案 »

  1.   

    var
      TestS: PChar;<----------TestC  呵呵,你在逗我呀??!MSN上N久不见你了
      

  2.   

    procedure TestProc;
    var
      TestC: PChar;
    begin
    //  TestC := AllocMem(7);
      TestC := 'A Test'#0;
      MessageBox(0, TestC, TestC, MB_OK);
    //  FreeMem(TestC);
    end;
      

  3.   

    我不知道你到底想干什么,这个反正不出错
    procedure TestProc;
    var
      Testc: PChar;
      tmp:^pchar;
    begin
      tmp:=AllocMem(7);
      Testc:=tmp^;
      TestC := 'A Test'#0;
      MessageBox(0, TestC, TestC, MB_OK);
      FreeMem(tmp);
    end;
      

  4.   

    呵呵,sysu(死树) ,你错了!
    你测试一下!呵呵!
      

  5.   

    hyspeter(独钓寒江) 
    呵呵你的是没错,不过,嘿嘿!你还是没搞清楚本质!
      

  6.   

    o,bewill(bewill) ,你在MSN上是叫什么呀?
      

  7.   

    多谢批评说的也是,AllocMem应该可以给pchar分配内存,可是释放的时候就成问题了了, 
      FreeMem 只释放指针的..........
      

  8.   

    procedure TestProc;
    var
      TestC: PChar;
    begin
      TestC := AllocMem(7);
      StrCopy(@TestC[0], 'A Test'#0);
      ShowMessage(TestC);
      FreeMem(TestC);
    end;
      

  9.   

    其实问题很简单
    var
      TestS: PChar;
    begin
      TestS := AllocMem(7);
      ShowMessage(IntToStr(Integer(TestS)));
      TestS := 'A Test'#0;
      ShowMessage(IntToStr(Integer(TestS)));
      //FreeMem(TestS);
    end;
    你看看就知道了,'A Test'做为常量字符串有自己的地址,
    TestS := 'A Test'#0;
    这种赋值只是简单的把指针指向了该常量,而并没有使用你所分配的内存;
    所以写程序时,如果使用AllocMem给PChar分配内存后,千万别直接用字符常量赋值!
      

  10.   

    1.
    var
      TestC: PChar;
    2.
      TestC := AllocMem(7);
    3.
      MessageBox(0, TestC, TestC, MB_OK);
    4.
    TestC := 'A Test'#0
    应加;

    5.最不该的是
    不应该
    TestC := 'A Test'#0
    这样
     TestC指向数据段的内存,为只读的内存
      FreeMem会产生AV错误
    改为
      StrCopy(TestC, 'A Test');
    就这些