我用如下方法去开辟一块内存:char *pch = new char[10];
pch = "aaa";
有朋友说上面的话和char *pch = "aaa";的作用一样。一会就没了。请问怎样new开辟内存,才能长久的保存值"aaa"  ?

解决方案 »

  1.   

    char *pch = new char[10]; 
    memcpy(pch, "aaa", 3);  //或者strcpy(pch, "aaa");
    pch[3] = 0;
      

  2.   

    char *pch = new char[10];
    pch = "aaa";这样是不是有 内存泄露的嫌疑??
    因为 pch 没有delete....
      

  3.   

    用strcpy(pch, "aaa"); 就可以!
    如果用pch = "aaa",是将pch指向常量"aaa"零时生成的地址,而以前new 出来的空间,就失去控制了,还容易造成内存泄露!
      

  4.   

    多谢,我明白了。delete我倒是知道。
      

  5.   

    char *pch = new char[10];
    pch = "aaa"; 其实上面语句中 new char[10] 内存已经开辟了,在堆上。
    而 "aaa" 是一个常量字符串或全局字符串,存放在另一个地址空间中。(即不在堆,也不在栈)
    也就是说,如果不对pch 这个进行delete操作的话,此内存会一直存在,直到程序退出
    而 全局变量则是由系统控制其销毁。。
      

  6.   


    象这种小数组,不要使用 net ,因为没那个必要。
    void test()
    {
      char buf[100];
      strcpy( buf, "Hello World!" );
    }
    这样用多好,函数返回时,定义的数组 buf 自动释放,多好。
      

  7.   

    char *pch = new char[10]; // 开辟内存
    pch = "aaa"; //指针赋值这样会导致 new 出来的内存被忽略掉,造成泄漏pch = "aaa";
    改成
    strcpy(pch, "aaa");
      

  8.   

    肯定不一样 new在堆上,int temp =30;放在栈上函数结束它也over了