string 管理 char 数组, 摆脱new delete

来源:互联网 发布:asp数据库导出excel 编辑:程序博客网 时间:2024/05/24 03:23

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


一个内存越界问题:

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
原创粉丝点击