新公司,维护一个旧代码:
一个内存越界问题:
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一下,麻烦但也没有其他选择了。
时间: 2024-11-09 01:56:50