我申请了内存如下:    
    GetMem(OrgAddr,32);
    GetMem(DestAddr,20);
    GetMem(UserData,140);
    GetMem(sMsgID,23);
    GetMem(TimeStamp,20);
    GetMem(sSubmitDate,11);
    GetMem(sDoneDate,11);
    GetMem(sStatus,80);
用完后释放:
      if OrgAddr <>nil then  dispose(OrgAddr);
      if DestAddr <>nil then dispose(DestAddr);
      if UserData <>nil then dispose(UserData);
      if sMsgID <> nil then dispose(sMsgID);
      if TimeStamp <>nil then dispose(TimeStamp);
      if sSubmitDate <> nil then dispose(sSubmitDate);
      if sDoneDate <> nil then dispose(sDoneDate);
      if sStatus <> nil then dispose(sStatus);
但总在释放的时候报 'Invalid pointer operation'错误,是什么原因呢, 大家帮看看

解决方案 »

  1.   

    用FreeMem()
    而不是dispose,dispose是释放指针
      

  2.   

    用了 FreeMem还是一样的错误啊,
      

  3.   

    是你的内存分配使用函数使用的有问题!!!如果是定长的数据结构,使用New--Dispose进行分配和释放
    如果是不定长的数据结构,使用GetMem--FreeMem进行分配和释放
      

  4.   

    我是定义的 pChar
    OrgAddr,DestAddr,UserData,TimeStamp:PChar;
    sMsgID,sSubmitDate,sDonedate,sStatus:PChar;所以用 GetMem   FreeMem 应该可以啊,不是这个问题啊
      

  5.   

    看delphi的例子:
    var  F: file;
      Size: Integer;
      Buffer: PChar;
    begin
      AssignFile(F, 'test.txt');
      Reset(F, 1);
      try
        Size := FileSize(F);
        GetMem(Buffer, Size);
        try
          BlockRead(F, Buffer^, Size);
          ProcessFile(Buffer, Size);
        finally
          FreeMem(Buffer);
        end;
      finally
        CloseFile(F);
      end;end;采用这个方法不需要判断if OrgAddr <>nil then
      

  6.   

    我知道 用 try  finally 结构写不要判断 if orgAddr <>nil , 但这不是问题关键啊
      

  7.   

    你的问题可能是这样的:
    1、你申请的内存没有初始化,这样可能导致FreeMem释放的时候(以\0结尾)多余释放了不需要释放的内存!!!
    2、使用FreeMem,最好制定释放数据的长度,这样就可以避免上面由于没有初始化内存所产生的错误!!!
      

  8.   

    用getmem申请内存就要用freemem释放,用NEW申请才用DISPOSE
      

  9.   

    要么直接try  finally,释放,不用判断,
    而且GETMEM()对应FREEMEM释放
      

  10.   

    如果是申请和释放错误,导致内存溢出,不知道DELPHI调试环境下有什么办法侦测?
      

  11.   

    pchar型的话 最好多申请一个字节的空间 好放 \0终结符  这样解决了我的问题了, 谢谢大家