MyString& StrUtil::newMyStringfromTDesC16(TDesC16& aDesC16) { HBufC8* hBuf8 = HBufC8::New(aDesC16.Length() * 3); MyString ret;
if (hBuf8) { TPtr8 aPtr8(hBuf8->Des()); TInt cvtResult = CnvUtfConverter::ConvertFromUnicodeToUtf8(aPtr8, aDesC16);
ret.assign((const char *)(hBuf8->Ptr()), hBuf8->Size()); if (cvtResult != 0) { }
delete hBuf8; hBuf8 = NULL; }
return ret; }
|
我们知道,C++中的内存分为堆和栈(忽略全局变量区ect),栈是存放临时变量的,栈内的资源在生命周期结束后会被释放掉。之所以这样做,是因为栈的资源一般来说是非常有限的。
那么上面那段程序中MyString ret;这句是在栈上建立一个临时对象
然后return ret;这句返回这个临时对象
但是不幸的是,ret遇到下面的}时生命周期结束,于是被释放掉!所以这段程序的返回值指向了一段已经被释放了的内存区域,于是出现不可知的bug。
改成下面即可:
MyString& StrUtil::newMyStringfromTDesC16(TDesC16& aDesC16) { HBufC8* hBuf8 = HBufC8::New(aDesC16.Length() * 3); MyString *ret = new MyString();
if (hBuf8) { TPtr8 aPtr8(hBuf8->Des()); TInt cvtResult = CnvUtfConverter::ConvertFromUnicodeToUtf8(aPtr8, aDesC16);
ret->assign((const char *)(hBuf8->Ptr()), hBuf8->Size()); if (cvtResult != 0) { }
delete hBuf8; hBuf8 = NULL; }
return *ret; }
|
MyString *ret = new MyString();是在堆空间里建立一个对象,而堆空间的资源必须由程序员显式的释放掉。
分享到:
相关推荐
SYMBIAN OS C++ 高效编程教程
本书旨在帮助读者编写良好的基于Symbian OS的C++程序。全书共分为21章,分别介绍了Symbian OS中的类命名约定、异常退出、清除栈、两段构造、描述符、良好的描述符风格、动态的数组与缓冲区、使用活动对象的事件驱动...
《Symbian OS C++ 高效编程》 源码 《Symbian OS Explained》 源码
Symbian出版社《Quick Recipes on Symbian OS...》中文《Symbian OS C++ 编程诀窍》源代码
Symbian OS C++ 编程诀窍.chm 章节【3.1----6.3】 图书版权归出版社和作者所有,CSDN & DearBook独家提供试读和连载 仅作学习用,禁止用于商业用途,保护作者合法权益
symbian C++编程注意规则,pdf
Symbian OS C++编程诀窍源代码.rar
SYMBIAN OS C++ 高效编程.rar
汇编及C++混合编程开发Symbian程序示例
如题,是关于Symbian C++处理的文档, 有兴趣的饿就拿去ba!!!
这是Symbian OS C++高效编程的源码,很辛苦才找到的。
本文的读者对象是:所有使用C++语言为Symbian OS 6.x/7.0s开发应用的开发伙伴们。 有一个不成文的80/20法则,说的是:需要用80%的时间去纠正开发中产生的20%的问题。本文的目的就是要解决这20%的问题。
SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第三部分
SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第二部分,
书中介绍的Symbian网站没有这个网页 我在CSDN上下载来的 个人觉得这个书非常不错 就把别人的资源贡献了
SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第一部分,
symbian+C++
OS中的类命名约定 11.1 基本类型 11.2 T类 21.3 C类 31.4 R类 51.5 M类 61.6 静态类 91.7 使用者注意事项 91.8 小结 9第2章 异常退出(leave):Symbian OS的异常 102.1 异常退出函数 102.2 ...
Symbian中的游戏编程;Symbian中的游戏编程Symbian中的游戏编程Symbian中的游戏编程
Symbian OS C++ 编程诀窍.chm 【-----请下载本人提供的另一个版本----】 章节【3.1----6.3】 图书版权归出版社和作者所有,CSDN & DearBook独家提供试读和连载 仅作学习用,禁止用于商业用途,保护作者合法权益