string 管理 char 数组, 摆脱new delete

新公司,维护一个旧代码:


一个内存越界问题:

c = *(sText+nLeng+1); // 读随便你
*(sText+nLeng+1) = 0; // 越界两个字符,写坏内存

这会导致, 在无压力正常情况下运行不报错, 不core dump。   


在大压力测试的时候(fork架构) , 某几个进程会报错 malloc(): memory corruption,而且没有core文件生成。


只能靠注释代码来排查。


又顺便发现了一个内存泄漏问题:


char *sDecodeText ;
...
sDecodeText = new char[Len+1]; // 后面竟没有delete

以上这些风格,明显就是C开发人员写出来的C++代码。


尝试用STL管理分配释放问题。


1.  std::array<char, num>, 有 data()操作, 但array是个模版, num编译器决议,  我需要支持运行时决议的。

2. vector和string, 这个两个都符合要求, vector改内存后, 里面的计数不能添加, 本来也不是这样用的,污染代码


 string 的c_str()还得const_cast一下,麻烦但也没有其他选择了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值