我的一个类中有一个方法,其返回类型为一个指针型,部分代码如下:
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.在程序中,有否其它方法能更好地返回一个指针型的数据,因为用指针进行操作实在是麻烦,就单申请内存和释放内存就够忙的了。
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.在程序中,有否其它方法能更好地返回一个指针型的数据,因为用指针进行操作实在是麻烦,就单申请内存和释放内存就够忙的了。
解决方案 »
- 发现DELPHI编译器一个严重的错误
- delphi excel数据导入access问题,着急!!
- DLL里面是子窗口 调用子窗口后发现TAB ENTER等都失去原先的作用了 请问怎么解决
- delphi5+win2000下自定义纸张的问题 。。。急等!!!(100分)
- 如何在win2000下屏蔽ctrl+alt+del?
- 用 Microsoft Media Player 的ocx 做播放器,哪儿有相关的资料
- 怎样去掉TDbmemo的焦点?
- 大专生都来加油!upup
- 用delphi 怎样能去掉cmos密码?请高手赐教
- Delphi送分题来了
- 如何能使Table的Filter输入更多的东西??在线等待
- 我用的delphi上面没有了菜单,怎么才能修好啊?
2.不用自己释放
3.不用指针可以返回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裡面填充數據即可。。