CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

请帮我看看这个函数,如何释放内存?

楼主Persistent8813(固执的,坚持的:山东诸城)2004-04-04 16:38:09 在 C++ Builder / 基础类 提问

 
  //////////////////////////////////////////////////////////////////////////////////  
  //     函数名称:StrHexToChar(AnsiString   StrHex)  
  //     函数功能:将16进制字符串转为CHAR字符   (   例String"36"   ->char   "6"   )  
  //     函数参数:AnsiString   StrHex  
  //     函数返回:char   *   Chr  
  //     函数日期:2003.11.25  
  //////////////////////////////////////////////////////////////////////////////////  
   
  char   *   StrHexToChar(AnsiString   StrHex)  
  {  
      AnsiString   StrHex_1;   //   取单个字符  
      int   a10;  
      int   yqw_Len   =   StrHex.Length();  
      char   *yqw_tmp;  
      yqw_tmp   =   new   char[yqw_Len/2];  
      for(int   i=1;   i<yqw_Len;i+=2)  
            {  
              StrHex_1   =   "0x"   +   AnsiString(StrHex[i])   +   AnsiString(StrHex[i+1]);  
              a10   =   StrHex_1.ToIntDef(5);   //   此处为什么要用5?应该用几?  
   
              yqw_tmp[i-1]   =   char(a10);  
            }  
      return   yqw_tmp;  
  }  
  什么时候delete   yqw_tmp呢? 问题点数:50、回复次数:21Top

1 楼wasoxi(我就是(没意思~~~))回复于 2004-04-04 16:49:41 得分 0

upTop

2 楼matq2008(叶子.net)回复于 2004-04-04 17:00:46 得分 10

应试显示删除的  
  Top

3 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-04 17:05:34 得分 0

能不能说清楚些啊,老大Top

4 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-04 17:16:39 得分 0

upTop

5 楼matq2008(叶子.net)回复于 2004-04-04 17:24:17 得分 0

我不喜欢这种自己申请但不删除的方式,你可以改为返回AnsiString  
  在最后用StrPas这个函数转换为AnsiString,然后删除它,再返回这个AnsiStringTop

6 楼matq2008(叶子.net)回复于 2004-04-04 17:28:03 得分 0

那个5是缺省值,指不能转换的字符缺省转为它吧Top

7 楼ArWen()回复于 2004-04-04 17:29:37 得分 10

同意楼上的.  
  不过楼主要是还要坚持用你的方式,则调用处负责删除就是了.  
  char   *   result   =     StrHexToChar("...");  
        ...             //   使用result  
  delete   result;Top

8 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-04 17:34:05 得分 0

楼上是什么意思啊?用result还不是一样?它又不是特殊的变量吧  
   
  叶子说的用String是不行的啊,你想,如果是'/0'怎么办?还是要用字串数组。Top

9 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-04 17:36:42 得分 0

只能用ArWen()   的方式吗?那样不会有问题?从函数外删除?不会出问题?呵呵,试试了  
  如果不出问题也应该可以Top

10 楼JetKingLau(时差)(亦远亦近)(静坐常思已过 闲谈勿论人非 …………)回复于 2004-04-04 17:39:09 得分 10

这样吧,交由引用者自己解决。  
   
  char   *   StrHexToChar(AnsiString   StrHex,   char   yqw_tmp[])  
  {  
      AnsiString   StrHex_1;   //   取单个字符  
      int   a10;  
      int   yqw_Len   =   StrHex.Length();  
  //     char   *yqw_tmp;  
  //     yqw_tmp   =   new   char[yqw_Len/2];  
      for(int   i=1;   i<yqw_Len;i+=2)  
            {  
              StrHex_1   =   "0x"   +   AnsiString(StrHex[i])   +   AnsiString(StrHex[i+1]);  
              a10   =   StrHex_1.ToIntDef(5);   //   此处为什么要用5?应该用几?  
   
              yqw_tmp[i-1]   =   char(a10);  
            }  
      return   yqw_tmp;  
  }  
   
   
  Top

11 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-04 17:39:43 得分 0

但是总感觉不完美,其实要是能用不定长字串数组就能解决这个函数,可我不会啊Top

12 楼xiaoshi0(Rain)回复于 2004-04-05 09:37:46 得分 20

如果要做这样的函数,不能这么调用,因为这样的话,得不到正确的答案,如果想返回一个字符串,希望用传址的方式,或者引用的方式,现写一函数如下:  
  bool   StrHexToChar(const   AnsiString   StrHex,   char   *yqw_tmp)  
  {  
          if(StrHex.IsEmpty())  
          {  
                  return   false;  
          }  
         
          if(yqw_tmp   ==   NULL)  
          {  
                  return     false;  
          }  
   
          AnsiString   StrHex_1;    
          int   a10;  
          int   yqw_Len   =   StrHex.Length();  
       
          for(int   i   =   1;   i   <   yqw_Len;   i   +=   2)  
          {  
                  StrHex_1   =   "0x"   +   AnsiString(StrHex[i])   +   AnsiString(StrHex[i+1]);  
                  a10   =   StrHex_1.ToIntDef(5);   //主要看你想默认是多少  
                  yqw_tmp[i-1]   =   char(a10);  
          }  
          return   true;  
  }  
  Top

13 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-05 11:27:40 得分 0

发现一个大问题,此题是无解了,呵~~  
  本来是想将16进制格式的字串转成CHAR字符串,但如果中间有值被转成'\0'就还是不成其字符串。看来是没有办法了。唉Top

14 楼xiaoshi0(Rain)回复于 2004-04-05 11:48:01 得分 0

你的程序想干什么呀?告诉我功能,我帮你实现Top

15 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-05 16:24:54 得分 0

TO小鱼儿:将16进制格式的字串转成CHAR字符串:'363534'->'654'.  
  有没有可以包含多个'\0'的字符串啊?可那样就不叫字符串了对吧?叫数组是没问题的。  
  用CHAR[]数组可以解决吗?用指针不行了?晕了啊Top

16 楼xiaoshi0(Rain)回复于 2004-04-05 17:21:18 得分 0

还是没明白你的意思,为什么要有多个'\0'呀?Top

17 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-05 18:12:11 得分 0

因为要转的字串中不能排除有多个'\0'的可能啊Top

18 楼xiaoshi0(Rain)回复于 2004-04-06 09:20:13 得分 0

那样的话就必须分成多个字符串处理,处理完之后再合并到一起,因为有'\0'的话是永远不能用一个字符串表示的Top

19 楼limlzm(凡叶)回复于 2004-04-06 10:10:52 得分 0

看来再写多个函数负责释放,然后没用到就调用这个函数释放是唯一的方法了。了解Top

20 楼Persistent8813(固执的,坚持的:山东诸城)回复于 2004-04-06 13:59:18 得分 0

不使用字符串,只使用指针,解决。Top

21 楼xiaoshi0(Rain)回复于 2004-04-06 14:05:11 得分 0

呵呵,那样的话不使用的字符数组么!嘿嘿Top

相关问题

  • 讨论内存分配函数malloc,内存释放函数free,如何实现?
  • 这个函数里 p1 的内存怎么释放?
  • 如何释放调用api函数是占有的内存?
  • 关于free函数释放内存的进一步请教
  • 请看我的析构函数释放内存有错误么?
  • 急!如何在一个函数中释放另一个函数申请的内存〉?
  • 系统库函数返回值的内存释放问题,一起来讨论。
  • socket编程时,一些函数自动分配得内存如何释放?
  • 菜鸟问题一个返回CHAR *的函数,怎样释放内存
  • 调用函数内存分配和释放要注意些什么咧>?

关键词

  • 函数
  • 字符串
  • yqw
  • ansistring strhex
  • 释放
  • char

得分解答快速导航

  • 帖主:Persistent8813
  • matq2008
  • ArWen
  • JetKingLau
  • xiaoshi0

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo