首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

生手:char *ptr = new char

2013-12-05 
新手:char *ptr new charchar *ptr new charptr ABCDEcout ptr endldelete ptr[解决办

新手: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

热点排行