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++ 高效编程》与《Symbian OS Explained》是两本专注于Symbian操作系统开发的书籍,它们为开发者提供了深入理解Symbian OS架构、API以及C++高效编程技巧的重要资源。源码的提供使得读者能够通过实际...
《Symbian OS C++高效编程的源码》是一份珍贵的资源,它涵盖了Symbian OS平台上C++编程的核心技术和实践经验。Symbian OS曾是智能手机操作系统中的领军者,尤其在诺基亚手机中广泛使用,对于了解移动设备开发历史和...
在Symbian OS C++编程中,有几个关键知识点不容忽视: 1. **EPOC运行时环境**:Symbian操作系统基于EPOC运行时环境,这是一个微内核架构,包含了一系列的服务和子系统,如内存管理、进程间通信(IPC)和线程管理等...
《Symbian OS C++ 编程诀窍》是一本专为Symbian操作系统开发者编写的实战指南,书中深入探讨了在Symbian平台上进行C++编程的各种技巧和最佳实践。随书附带的源代码提供了丰富的实例,帮助读者更好地理解和应用书中所...
本篇文章将深入探讨汇编及C++混合编程在Symbian程序开发中的应用和关键知识点。 首先,了解Symbian操作系统是必要的。Symbian是一个实时、分时多任务的操作系统,特别适合资源有限的移动设备。它的API主要是C++构建...
《Symbian OS C++编程诀窍源代码》是一份重要的配套教学资源包,专为学习Symbian OS操作系统上的C++编程者提供。Symbian OS曾是智能手机领域广泛使用的操作系统,尤其在诺基亚手机中占据主导地位。这份资源包含了一...
Symbian OS C++ 编程诀窍.chm 章节【3.1----6.3】 图书版权归出版社和作者所有,CSDN & DearBook独家提供试读和连载 仅作学习用,禁止用于商业用途,保护作者合法权益
《SYMBIAN OS C++ 高效编程》是针对Symbian操作系统进行深入探讨的一份珍贵资源,主要针对使用C++进行系统级和应用级开发的程序员。Symbian操作系统曾是智能手机领域的主流平台,尤其在功能手机时代,其市场份额显著...
以上只是Symbian C++编程中的一小部分核心知识点,实际开发过程中还需要深入了解系统架构、API用法以及各种平台特性。阅读提供的"Symbian C++编程注意规则" PDF文件,将能更深入地了解这些规则和最佳实践。
在Symbian C++手机编程中,字符串处理与标准C/C++有所不同,主要是因为Symbian OS使用了一种称为描述符(Descriptors)的机制来安全高效地管理字符串和二进制数据。描述符是一种内建的数据结构,它可以是常量或可变...
直接使用标准C++中的`new`运算符而不是Symbian特定的`new(ELeave)`可能会导致资源泄漏,因为后者能够在分配失败时抛出异常。 **2.5.3 错误使用了后缀‘L’** 在Symbian OS中,后缀‘L’表示一个对象是在堆上分配的...
本文将深入探讨在S60平台上ANSI C++与Symbian C++之间的差异,帮助开发者理解这两种编程语言在实际应用中的优缺点。 首先,ANSI C++(也称为ISO C++)是一种国际标准的C++版本,它定义了C++语言的语法、库和编译器...
SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第三部分
SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第二部分,
本课件作为塞班公司内部的培训材料,其价值在于提供了专业、系统的知识讲解,帮助开发者更好地掌握在Symbian平台上进行C++编程的技巧。 Symbian C++编程涉及的知识点包括但不限于以下内容: 1. **Symbian操作系统...
《Symbian OS C++ for Mobile Phones》是一套完整的教程,涵盖了Symbian操作系统下C++编程的方方面面,包括Volume1、Volume2和Volume3三部分。这套教程旨在帮助开发者深入理解和掌握在移动设备上使用Symbian OS进行...
SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第一部分,