char *p = new char; 和 char *p2 = "abcdef"的区别
来源:互联网 发布:苹果微信网络连接失败 编辑:程序博客网 时间:2024/05/18 00:06
char *p = new char; 和 char *p2 = "abcdef"的问题
今天在写代码时,突然间想到一个问题,如果我char *p = new char;出个指针,是否
可以这样操做,对p赋常量字符串呢? p = “abcdef”;
先做个实验:
#include <iostream>using namespace std;void main(){ char* a= new char; a = "abcde"; cout<<a<<endl; delete a; // 在这里报内存方法非法}
在第9行出现错误,为什么呢?~~~
第5行,new 1bit空间 没问题, 第8行delete 也不会有问题
那第7行输出更没有问题了
看来问题只能是第6行了
我们来看看第6行先,
首先char* p = new char;是定义了一个字符指针,new char分配了一个bit的空间,并让p指向这个空间。
而我们在定义一个C语言传统字符串时常用char* a= "abcdef";
因为"abcdef"常量有个系统分配的代表存放这组字符串的匿名首地址,然后把这个地址赋给了a。
由此可见,
a只是个指针而以,它可以指向一个字符,也可以指向一个字符串。在第5行的时候,a指向的是一个一
字节的char,但是在第6行的时候,a已经指向"abcde"了。
所以,
这个例子是一个典行的资源泄露的例子。因为new char了,确没有使用,并由于a在之后已经不指
向这个字符的空间,使之以后都没有机会再被释放掉了,所以这1bit空间就资源泄露了。
总结:
在使用new分配的char型指针空间时,要对其赋值,最好使用memcpy 或strncpy
不建议使用常量字符串赋值
- char *p = new char; 和 char *p2 = "abcdef"的区别
- char *p="abcdef"和char s[]="abcdef"存储在哪里的问题!
- char *p=new char
- char *p=new char
- char *p="abcdef"和char s[]="abcdef"存储在哪里?
- char *Str;Str="abcdef";和char Str[]="abcdef";有什么区别??
- char *p和 char p[]的区别
- char *p和 char p[]的区别?
- char* p 和 char p[] 的区别
- 【LVL1_5_c】【思考题】【7】char *p1="hellow world"和char p2[]="hellow world"的区别
- [ALIB2-EXAM]有关memmove时的char *p=" "和char p[]=" "的区别
- 指向字符数组的指针 char*p="abc"和char p[]="abc"的区别。
- char *p= "hello"和char p[] = "hello"的区别
- char* p = new char [20] delete p 出现问题!
- 关于指针char *p和数组char p[] 的区别
- typedef char * pStr的问题,const char *p1 = string和const pStr p2 = string的区别
- char *p 与 char p[]的区别
- char *p1="china" 与char p2[]="china"的区别
- 数组与指针的区别
- 请君入翁,远离Java珍爱生命!Java的低成本骗局
- Android 上百实例源码分析以及开源分析
- C#中怎么创建ACCESS数据库文件
- 关于获得对话框中子控件相对该对话框客户区的位置
- char *p = new char; 和 char *p2 = "abcdef"的区别
- V4L2编程小结
- QoS学习笔记 .
- 联想V470 ubuntu 12.04 LTS开机屏幕亮度设置
- c/c++在windows下获取时间和计算时间差的几种方法总结
- [Mule学习]入门:写一个最简单的小程序ZT
- PowerDesigner-2(业务处理模型-BPM)
- 黑马程序员-网络编程
- 深入研究MRTG能帮助我们完成什么(待续)