`
izuoyan
  • 浏览: 9218929 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Symbian中窥探C++编程功底

阅读更多

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++ 高效编程.pdf

    SYMBIAN OS C++ 高效编程教程

    《Symbian OS C++ 高效编程》 源码

    《Symbian OS C++ 高效编程》与《Symbian OS Explained》是两本专注于Symbian操作系统开发的书籍,它们为开发者提供了深入理解Symbian OS架构、API以及C++高效编程技巧的重要资源。源码的提供使得读者能够通过实际...

    Symbian OS C++高效编程的源码

    《Symbian OS C++高效编程的源码》是一份珍贵的资源,它涵盖了Symbian OS平台上C++编程的核心技术和实践经验。Symbian OS曾是智能手机操作系统中的领军者,尤其在诺基亚手机中广泛使用,对于了解移动设备开发历史和...

    symbian os c++编程诀窍 随书源码

    在Symbian OS C++编程中,有几个关键知识点不容忽视: 1. **EPOC运行时环境**:Symbian操作系统基于EPOC运行时环境,这是一个微内核架构,包含了一系列的服务和子系统,如内存管理、进程间通信(IPC)和线程管理等...

    Symbian OS C++ 编程诀窍 随书源代码

    《Symbian OS C++ 编程诀窍》是一本专为Symbian操作系统开发者编写的实战指南,书中深入探讨了在Symbian平台上进行C++编程的各种技巧和最佳实践。随书附带的源代码提供了丰富的实例,帮助读者更好地理解和应用书中所...

    汇编及C++混合编程开发Symbian程序

    本篇文章将深入探讨汇编及C++混合编程在Symbian程序开发中的应用和关键知识点。 首先,了解Symbian操作系统是必要的。Symbian是一个实时、分时多任务的操作系统,特别适合资源有限的移动设备。它的API主要是C++构建...

    Symbian OS C++编程诀窍源代码.rar

    《Symbian OS C++编程诀窍源代码》是一份重要的配套教学资源包,专为学习Symbian OS操作系统上的C++编程者提供。Symbian OS曾是智能手机领域广泛使用的操作系统,尤其在诺基亚手机中占据主导地位。这份资源包含了一...

    Symbian OS C++ 编程诀窍

    Symbian OS C++ 编程诀窍.chm 章节【3.1----6.3】 图书版权归出版社和作者所有,CSDN & DearBook独家提供试读和连载 仅作学习用,禁止用于商业用途,保护作者合法权益

    SYMBIAN OS C++ 高效编程.rar

    《SYMBIAN OS C++ 高效编程》是针对Symbian操作系统进行深入探讨的一份珍贵资源,主要针对使用C++进行系统级和应用级开发的程序员。Symbian操作系统曾是智能手机领域的主流平台,尤其在功能手机时代,其市场份额显著...

    symbian C++编程注意规则

    以上只是Symbian C++编程中的一小部分核心知识点,实际开发过程中还需要深入了解系统架构、API用法以及各种平台特性。阅读提供的"Symbian C++编程注意规则" PDF文件,将能更深入地了解这些规则和最佳实践。

    Symbian C++手机编程中字符串处理

    在Symbian C++手机编程中,字符串处理与标准C/C++有所不同,主要是因为Symbian OS使用了一种称为描述符(Descriptors)的机制来安全高效地管理字符串和二进制数据。描述符是一种内建的数据结构,它可以是常量或可变...

    symbian_C++编程注意规则

    直接使用标准C++中的`new`运算符而不是Symbian特定的`new(ELeave)`可能会导致资源泄漏,因为后者能够在分配失败时抛出异常。 **2.5.3 错误使用了后缀‘L’** 在Symbian OS中,后缀‘L’表示一个对象是在堆上分配的...

    S60平台:比较ANSI C++和Symbian C++

    本文将深入探讨在S60平台上ANSI C++与Symbian C++之间的差异,帮助开发者理解这两种编程语言在实际应用中的优缺点。 首先,ANSI C++(也称为ISO C++)是一种国际标准的C++版本,它定义了C++语言的语法、库和编译器...

    SYMBIAN OS C++高效编程.part3

    SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第三部分

    SYMBIAN OS C++高效编程.part2

    SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第二部分,

    symbian C++中文课件

    本课件作为塞班公司内部的培训材料,其价值在于提供了专业、系统的知识讲解,帮助开发者更好地掌握在Symbian平台上进行C++编程的技巧。 Symbian C++编程涉及的知识点包括但不限于以下内容: 1. **Symbian操作系统...

    Symbian OS C++ for Mobile Phones(Volume1-3全)

    《Symbian OS C++ for Mobile Phones》是一套完整的教程,涵盖了Symbian操作系统下C++编程的方方面面,包括Volume1、Volume2和Volume3三部分。这套教程旨在帮助开发者深入理解和掌握在移动设备上使用Symbian OS进行...

    SYMBIAN OS C++高效编程.part1 中文版

    SYMBIAN OS C++高效编程,中文版,分卷压缩,这是第一部分,

Global site tag (gtag.js) - Google Analytics