我的一个类中有一个方法,其返回类型为一个指针型,部分代码如下:
Type
  PKsMessage=^TKsMessage;
  TKsMessage=Record
    Code:Integer;
    Name:String;
    Sala:Single;
  End;
...
Function TGetKsMessage.GetLB:PKsMessage;
Begin
  New(Result);
  Result.Name:='';
  if (strConn = '') or (strTable='')  then Exit;
  ....//之后根据数据库中的值对Result进行赋值操作
End;
现在的问题是
1.在进行Result的赋值的时候很不稳定,经常出现内存访问错误的提示
2.这个Result的内存空间在调用程序中应该怎样释放?
3.在程序中,有否其它方法能更好地返回一个指针型的数据,因为用指针进行操作实在是麻烦,就单申请内存和释放内存就够忙的了。

解决方案 »

  1.   

    1.可能是指针没有分配就用了...
    2.不用自己释放
    3.不用指针可以返回TKsMessage
      

  2.   

    PKsMessage=^TKsMessage;
      TKsMessage=Record
        Code:Integer;
        Name:String;
        Sala:Single;
      End;最好不要用string類型 可以用靜態數組類型Name: array[0..10] of char;
    因為string是動態增長的 所以可能會出現問題 而你的Name可能長短發生變化 所以錯誤也是偶爾出現Function TGetKsMessage.GetLB:PKsMessage;
    Begin
      New(Result);
      Result.Name:='';
      if (strConn = '') or (strTable='')  then Exit;
      ....//之后根据数据库中的值对Result进行赋值操作
    End;你這種風格是不太好的風格 雖然是可以在外界使用完畢候 對這個返回值進行Dispose..以釋放
    但 很可能 內存洩漏
    一般來說 是:Function GetLB(pMsg: PKsMessage): Boolean;
    往 pMsg裡面填充數據即可。。