今天中招了!

有一个类,内部有个 const char * 类型的变量 word, 该类构造函数用一个string来初始化word,于是我想都没想就这么写:

1 MyClass(std::string inputStr){
2   this->word = inputStr.c_str();
3 }

哪知道!这是个陷阱!以前一直都没意识到,c_str()就返回一个地址而已,而这个地址可能会随着string 对象的销毁(比如局部对象啊,或者显示引用delete)而变得无效!!

众所周知,(其实我也就上周才知道。。。), std::string内部是有一个char buffer 指针的存在的,用来实际存储这个string的内容,而c_str()无非就是把这个内部的东西返回到外部而已。

而const char *也不就是个指针么,老老实实指着 c_str() 返回来的东西,结果不想那块地址会被删除!

我现在的解决方法是这么做咯:

01 void constchartest(){
02     string *a = new string("abc");
03  
04     //define a new memory space for saving this char array
05     char *cha = new char[a->size() + 1];
06     memcpy(cha,a->c_str(),a->size() + 1);
07  
08     const char *p = cha;    //point to this new allocated  memory
09  
10     delete a;   //OK now p is irrelevant with a, never mind if a is deleted
11     cout << p << endl;
12 }

今天又包了一下,包了个很好看的函数,以后可以直接赋值过来用:

01 inline char * getCharPtr(string &str){
02  
03     //define a new memory space for saving this char array
04     char *cha = new char[str->size() + 1];
05     memcpy(cha,str->c_str(),str->size() + 1);
06  
07     const char *p = cha;    //point to this new allocated  memory
08  
09     return p;
10 }

(转载)constnbsp;charnbsp;*amp;nbs…相关推荐

  1. (转载)Javanbsp;Collectionamp;nbs…

    原文来自于:Java Collection 在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据 ...

  2. [转载]计算机视觉、机器学习相关领域论文和源代码

    十二星女面对婚外情会说不吗? 新浪首页登录注册 苍茫大地的博客 http://blog.sina.com.cn/handphone [订阅][手机订阅] 首页博文目录图片关于我 个人资料 苍茫大地 微 ...

  3. NBS云硬盘无法挂载

    生产环境中的机器重启了下,导致原来已经挂载的云硬盘显示未挂载,但是想要挂载的时候提示"Volume is not available",问了下东哥,是因为云主机启动的时候,云硬盘还 ...

  4. (转载)library cache lock和library cache pin到底是什么

    (http://www.dbsnake.net/library-cache-lock-and-pin.html) Posted: December 16, 2011 | Author: Cui Hua ...

  5. CSDN如何转载别人的博客

    <转> 前言   对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人 ...

  6. 转载!!!如何写出一份高逼格的简历 get√

    转载如何写出一份高逼格的简历 本文出自 "浩子的▁运维笔录ヽ" 博客http://chenhao6.blog.51cto.com/6228054/1951038 1.前言  毕业季 ...

  7. [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?

    转载链接:https://www.zhihu.com/question/51325408/answer/125426642 来源:知乎 这个问题无外乎有三个难点: 什么是sum 什么是reduce 什 ...

  8. u-boot中filesize环境变量【转载】

    转载地址:https://blog.csdn.net/fzs333/article/details/48518559 U-Boot中的环境命令可以使用$(filesize)来确定刚下载(传输)得到的文 ...

  9. linux常用命令(转载)

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

最新文章

  1. 终极大招——怎么在学术会议上有所收获?
  2. LeetCode 309. Best Time to Buy and Sell Stock with Cooldown--Java解法-卖股票系列题目
  3. php mysql_query的的用法_PHP / MYSQL使用mysqli_query选择
  4. [C++ STL] map使用详解
  5. SVN服务器与客户端的配置
  6. C#中使用SendMessage进行进程通信,可发送字符串,结构体(不能发送类类型)。
  7. git上托管的代码如何部署在阿里云上_居然仅用浏览器搞定Spring Boot应用的开发与部署...
  8. 信息系统项目管理系列之九:项目质量管理
  9. Java对象表示方式1:序列化、反序列化和 transient 关键字的作用
  10. 硬盘的IDE、AHCI和NVMe模式区别
  11. HPSocket C++控制台版DEMO
  12. c语言根二的连分数,纯循环连分数 与 二次方程的根
  13. Python 文本生僻字判定和拼音标注脚本
  14. Linus Torvalds对晦涩的代码的反应
  15. Macbooster8免费mac清理垃圾软件功能介绍
  16. 爬虫之requests
  17. 两年计算机考研教训经验贴
  18. 带你全方位了解考研初试!
  19. 清华大学计算机系高考生源,清华在京录取圆满结束:生源好、质量优、扩幅大(转贴)...
  20. 《权威指南》笔记 -- 8.2 函数调用

热门文章

  1. NMS非极大值抑制的原理
  2. Spark抽取MySQL分表优化
  3. 原生js-简易点名册实现
  4. Java实现数据排序
  5. ASPICE系列:顺利通过ASPICE流程软件单元验证(SWE.4)
  6. BigDecimal如何保留小数位
  7. Akamai JS _abck sensor_data 源码解读第一天 纵观全文(2)
  8. 零基础学日语资料附经验分享
  9. Windows 10和Linux脚本启动jar包服务器,并设置开机启动
  10. 龙蜥降世,神龙升级,灵杰亮相,阿里云再出神器