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一下,麻烦但也没有其他选择了。

时间: 2024-11-09 01:56:50

string 管理 char 数组, 摆脱new delete的相关文章

Delphi中的PChar、String、Char数组

参考:http://blog.csdn.net/procedure1984/article/details/5419616 一.三者的区别 string和char数组都是一块内存,其中存放着连续的字符. string保存具体字符的内存对用户是透明的,有Delphi管理它的分配.复制和释放,用户不能干预(其实也可以,不过是通过非法途径) Char数组类似于C/C++中的字符数组 PChar是一个指针,它的大小只有32位.定义时由Delphi自动填0.要将PChar作为字符串使用的话,必须自己分配内

C/C++ string和char数组对比

string是c++特有的,使用时需添加头文件#include<string> (一)#include<string.h>和#include<cstring>以及#include<string.h>区别 <string.h> <string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <cstring> 在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新

PChar,PAnsiChar,String,AnsiString,Char数组,AnsiChar数组转换

PChar,PAnsiChar,String,AnsiString,Char数组,AnsiChar数组之间的转换关系见下图 通过转换链,可以实现任意两个类型之间的互转.如PChar转PAnsiChar,根据转换链可知 Dest := PAnsiChar(AnsiString(Source)),同理PAnsiChar转PChar为 Dest:= PChar(String(Source)) 如果转换结果最终为string,可以无需String转换,如Array[0..n] of AnsiChar转s

JavaSE8基础 String 将char数组的一部分转为String

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t01; public class Demo1 { public static void main(String[] args) { char[] c = { 'a', 'b', 'c', 'd', 'e', 'f' }; int startIndex = 1;// 从c[

String转换char数组和int型和Double型

package z; public class z { public static void main(String[] args) { String s = "123"; char[] c = s.toCharArray();// String转换为char[] for (int i = 0; i < c.length; i++) { System.out.println(c[i]); } int s_ = Integer.parseInt(s);// String转换为int

delphi char数组、string和Pchar的相互转换

因为要调用windows的api或者给vc++写接口,很多地方都要用到pchar,现在将char数组.string和pchar之间的相互转换都列出来,都是网上找的资料,我总结一下,先直接上代码,再讲原理. 1.string转换成pchar 可以使用pchar进行强制类型转换,也可以使用StrPCopy函数 var s:string; p,p1:PChar; begin s:='Hello Delphi'; p:=PChar(s); ShowMessage(p); p1:=StrAlloc(Len

char数组与string转换

1.char数组转string 有很多种方法: 假设c字符串定义为char ch[]="hello world!"; 1.向构造函数传入c字符串创建string对象: string str(ch); 2.使用拷贝构造函数创建string对象: string str = ch; 3.对已有的string对象调用string类内部定义的赋值运算符: string str; str = ch; 前两种类似,但和第三种有较大区别,前两种是运用构造函数直接创建一个内容与c字符串一致的string

char数组和string的相互转换

1 //char数组和string的转换 2 #include<iostream> 3 #include<string.h> 4 using namespace std; 5 int main() 6 { 7 char ch[]="hello world"; 8 // string s=ch;/* string可以直接用char数组赋值*/ 9 string s(ch);/* 对string赋值char数组差不多就这两种*/ 10 cout<<&qu

类型转换 String——》Char OR Char ——》String

String转换为char 在Java中将String转换为char是非常简单的.1. 使用String.charAt(index)(返回值为char)可以得到String中某一指定位置的char.2. 使用String.toCharArray()(返回值为char[])可以得到将包含整个String的char数组.这样我们就能够使用从0开始的位置索引来访问string中的任意位置的元素. char转换为String 将char转换为String大致有6种方法.总结如下: 1. String s