TPtr的长度问题???

dq1981 2005-11-24 04:56:39
iTmpBuffer = HBufC8::NewL(8);
iPtrOfTmpBuffer.Set(iTmpBuffer->Des());
TInt len = iPtrOfTmpBuffer.MaxLength(); //len = 12,奇怪,应该是 8 啊

大家帮我看看这几行代码
让我困惑的是我这里的 TmpBuffer明明是分配了 8 个长度的内存
为什么我的 len 值却是 12

SDK help 中关于 HBucC8 的 Des() 函数有这么一段说明,不知道什么意思,会不会跟我的这个错误有关——
The maximum length of the modifiable pointer descriptor is set to the length of the heap descriptor's buffer. Note that the maximum length is the length of the descriptor buffer in the allocated host heap cell; this may be greater than the maximum length requested when this descriptor was originally created or last re-allocated.

...全文
244 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
computeryf 2005-11-25
  • 打赏
  • 举报
回复
抱着治学严谨的态度我测试了一下
HBufC8* iTmpBuffer = HBufC8::NewL(8);
TPtr8 iPtrOfTmpBuffer(iTmpBuffer->Des());
TInt len = iPtrOfTmpBuffer.MaxLength();

我经过反复测试,运行的平台是winxp+UIQ2_1+Vc6,结果是len的值是8,没有出现搂主所说的12,楼上的可以给说明原因吗?
  • 打赏
  • 举报
回复
你本意是要取字符长度吧,字符数直接Length()就可以了,字节数Size()
computeryf 2005-11-25
  • 打赏
  • 举报
回复
明白了,谢谢子腾兄
chenziteng 2005-11-25
  • 打赏
  • 举报
回复
To windcao(风间草):
  看你回了很多贴,但类这种似答非所问也太多了。

To computeryf(叶枫):
  我已经说了有可能是原因2导致的,这种情况是赶巧的事。
chenziteng 2005-11-24
  • 打赏
  • 举报
回复
我记得<<Developing Series 60 Application>>里提到过这个问题,即HBufC实际分配的堆内存大于指定值。导致该问题的原因有二:

1. 字对齐。
  Symbian OS的字长是32位,因些存在32位对齐。

2. 堆自由单元最小值限制。
  Symbian OS的堆自由单元最小值是12个字节。如果从某个堆自由单元上分配空间后,剩余的空间小于该最小值,则系统会把这个自由单元整个分配出去。

  你给的程序片段中的问题应该是第二个原因导致的。

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧