读书人

生手:char *ptr = new char

发布时间: 2013-12-05 22:27:44 作者: rapoo

新手:char *ptr = new char;
char *ptr = new char;
ptr = "ABCDE";

cout << ptr << endl;

delete ptr;
[解决办法]
应该这样写才对:


char* ptr = new char[10];
strcpy(ptr, "ABCDE");
cout << ptr << endl;
delete[] ptr;


引用:
char *ptr = new char;
ptr = "ABCDE";

cout << ptr << endl;

delete ptr;

[解决办法]
你ptr指向的是常量区,后delete如何删除常量区内的数据呢
[解决办法]
有两个错误,new 开辟的空间还没有释放,就把ptr指向了一段常量区,原本创建的空间找不到了,然后删除ptr指向的常量区,这是不允许的
[解决办法]

char *ptr = new char; //ptr指向一个申请了一个字节的内存
ptr = "ABCDE"; //ptr又指向常量字符串为“ABCDE”的内存
cout << ptr << endl; //结论:你申请的内存根本没用。
delete ptr;

/***************************************************/
//你想表达的意思应该是这样:
char* pStr = new char[6];
strcpy(pStr,"ABCDE");
pStr[5] = '\0';
cout << pStr << endl;
if (NULL != pStr)
{
delete pStr;
pStr = NULL;
}

[解决办法]
char *ptr = new char; //内存内存地址了
ptr = "ABCDE"; //这里又是把常量字符串的地址赋值给ptr了!内存泄漏的
两个选择一个

1 char *ptr = NULL;
ptr = "ABCDE";

2 char *ptr = new char[10];
strcpy(ptr, "ABCDE");

//后面再delete []ptr;

[解决办法]
引用:
有两个错误,new 开辟的空间还没有释放,就把ptr指向了一段常量区,原本创建的空间找不到了,然后删除ptr指向的常量区,这是不允许的


引用:
char *ptr = new char; //内存内存地址了
ptr = "ABCDE"; //这里又是把常量字符串的地址赋值给ptr了!内存泄漏的
两个选择一个

1 char *ptr = NULL;
ptr = "ABCDE";

2 char *ptr = new char[10];
strcpy(ptr, "ABCDE");

//后面再delete []ptr;


study

[解决办法]
引用:
Quote: 引用:

你ptr指向的是常量区,后delete如何删除常量区内的数据呢

那这样呢?大神,求指教
char *ptr = new char;

strcpy( ptr, "ABCDE" );

cout << ptr << endl;

delete ptr;

改成
char *ptr = new char[6];

strcpy( ptr, "ABCDE" );

cout << ptr << endl;

delete[] ptr;
试试
[解决办法]
引用:

char *ptr = new char; //ptr指向一个申请了一个字节的内存
ptr = "ABCDE"; //ptr又指向常量字符串为“ABCDE”的内存
cout << ptr << endl; //结论:你申请的内存根本没用。
delete ptr;

/***************************************************/
//你想表达的意思应该是这样:
char* pStr = new char[6];
strcpy(pStr,"ABCDE");
pStr[5] = '\0';


cout << pStr << endl;
if (NULL != pStr)
{
delete pStr;
pStr = NULL;
}


代码不是写好了?
还这样?那样?
[解决办法]
delete []pStr; //写错了 改一下
[解决办法]
引用:
Quote: 引用:

delete []pStr; //写错了 改一下

好吧,我就是想问,new char 后 ,将一个字符串存放在里面(字符串的长度不确定),怎么delete.

new char[n] 这里怎么会不确定呢,这是你要申请多大的内存,char是一个字节,1*n即你要申请的内存大小。
delete的话,如果你是char* p = new char;就 delete p;就行。如果char *p = new char[3];就delete[] p;
这些是基础呢...
[解决办法]
char *ptr1 = new char
char *ptr2 = new char[10]
虽然ptr1和ptr2都是相同类型,语法上可以用字符串赋值,但是ptr1只指向1个字符,放不下更多的字符
而ptr2指向10个char的字符数组,所以能够存放你的ABCDE

读书人网 >C++

热点推荐