C风格字符串动态分配和撤销内存报错的问题
来源:互联网 发布:查看环境变量 linux 编辑:程序博客网 时间:2024/06/10 22:48
Definition:C风格字符串即是以‘\0’结尾的字符串(非string类型)。其生成方式有如下3种:
- char A[10]={'a','b','\0'};//显式定义
- char A[10]="ab";//隐式添加‘\0'定义
- char *A="ab";//隐式添加‘\0'定义
从上面可以看出,C风格字符串定义有基于字符数组(1和2)和基于字符指针(3)两种定义方式。
基于数组定义不易出错,只是像1中定义过程过于麻烦,推荐用2的方式定义;而基于字符指针同样可以定义C风格字符串,像3中定义方式也不会有问题,但是,假如事先不知道要输入什么字符串,则需要对字符指针动态分配内存,这样在撤销内存时你就很可能会遇到如下问题了
char * B=new char; //可以输入字符串并输出,但实际上是越界的。delete B;会报错!
char * B=new char[2];//只能输入长为1个字符的字符串。如果输入长字符串也同样可以输出,但实际上越界, delete [] B;会报错!这里要记住cin>>B;时输入的是一个C风格字符串,会自动多添加一个‘\0’字符结尾,这样保证你在cout<<B; 时可以得到正确字符串。所以字符串占内存长度为“输入字符串的长度+1”,如果这个长度大于你new给它的指针分配的内存,在delete[]撤销时便会报错。
所以,即使如char *B=new char; 这句只输入给B一个字符,delete B; 也会报错,因为多了'\0'占内存长度为2,越界!
0 0
- C风格字符串动态分配和撤销内存报错的问题
- 动态分配/撤销内存new和delete
- 动态分配内存 and malloc&new and 数组的动态分配、初始化(memset)和撤销(delete)
- C++动态分配内存(new)和撤销内存(delete)
- C++动态分配内存(new)和撤销内存(delete)
- new和delete运算符用于动态分配和撤销内存的运算符
- new和delete运算符用于动态分配和撤销内存的运算符
- new和delete运算符用于动态分配和撤销内存的运算符
- 2017.8.21 动态分配和撤销内存的运算符new和delete
- C++ 动态分配内存的(new)之撤销内存的(delete)
- C语言有关内存和动态分配内存传递问题
- C和C++动态分配内存
- C语言的动态分配内存
- C语言为二维数组动态分配内存的问题
- C语言中内存动态分配应注意的问题
- 关于动态分配内存的问题
- 动态分配内存的指针问题
- 数组的动态分配(new)、初始化(memset)和撤销(delete)
- 2013.12.13
- 年底到了,大家的公司怎么样?想跳槽啊!
- spring aop4
- 大数据导入之Bulk Insert的一点总结
- 动态规划 hdu 1500 Chopsticks
- C风格字符串动态分配和撤销内存报错的问题
- 学习笔记-关于字符集ANSI
- 动态规划 hdu 1978 How many ways
- 我们坐下来好好谈谈-与内心的对话
- vim中文帮助的安装
- 1.字符串“asdf|www.baisdfa”获得字符串中‘|’之前的字符。
- 学习大纲
- java 的基础常见问题
- LeetCode | Word Break