temp1=new char[1024];
temp1="你好啊!";
简直乱套了,一两句解释不请,还是找本C++的书来看看吧。提示:首先你要明白new char[1024]返回的是一个“char*”类型的指针,然后,你要明白当把一个“char*”类型的指针赋给一个CString对象时会发生什么。
然后你需要明白所有new了不释放的情况全是内存泄露;
最后,还需要明白,CString对象自身会管理自己占用的内存,不会造成内存泄露。但问题是,它只能管好它自己,管不了外边别人new出来的。

解决方案 »

  1.   

    new是动态申请内存,申请的内存如果不够大,则还可以delete后重新申请。
    而CString temp2;
    temp2="你好啊!";:由于本人没有学过MFC,怀疑与标准string是类似的实现。将new/delete封装了,所以你看不到。
      

  2.   

    对不起,刚刚没有注意到类型匹配,现改一下定义!
    char *temp1;
    temp1=new char[1024];
    temp1="你好啊!";
    MessageBox(temp1); char *temp2;
    temp2="你好啊!";
    MessageBox(temp2);
    先请大家看下面两个语句,程序运行时,以下两个语句都能正常运行!]
    一):
    char *temp1;
    temp1=new char[1024];
    temp1="你好啊!";
    MessageBox(temp1);
    二):
    char *temp2;
    temp2="你好啊!";
    MessageBox(temp2);两个char *类型的变量,temp1 temp2。
    temp1申请了内存,而temp2没有申请内存,可是他们都能接收付值,程序运行两者都也正常。那么这样的话,temp1的temp1=new char[1024];语句是不是多余?
    如果多余为什么很多程序又要用new char来给变量申请内存呢?而不是直接定义一个变量,接着就给该变量付值,不需要申请内存呢。还有,对于一)temp1这个变量占有的内存,怎么样释放?也就是delete语句怎么写?
      

  3.   

    1.temp1=new char[1024];没必要
    2.如果用了new,就要delete
      

  4.   

    []这个什么意思?
    刚刚将该语句加进去调试了一下程序,执行
    到delete[]temp1语句时发生了错误!
      

  5.   

    []表示删除的是数组指针,
    可能是你中间没加空格发生了错误
    我一直在想,像int a这样定义变量是不是像定义类的对象一样也会有自己的构造和析构函数,可惜所有的C++书上都没有这方面的说明;
    至于你说的temp1=new char[1024];在你的例子中不需要,两种实现方式过程不一样,但结果一样;
      

  6.   

    temp1=new char[1024];
    temp1="你好啊!";
    ======================
    ——这样等于直接把刚刚申请的内存给丢弃了,即内存泄露。因为执行
    temp1="你好啊!";
    之后,temp1不再指向刚刚分配的那块内存,而是指向了一个字面字符串,字面字符串一般保存在程序的常量区中。
    当然,你也完全可以利用刚刚申请的内存,而不是指向常量区中的字符串:
    temp1=new char[1024];
    strcpy(temp1, "你好啊!");
      

  7.   

    To:quantumcat(量子猫) 
    int a;这种内建内类型的变量只有被定义成全局变量(包括名字空间中的孤立变量)、类域中的静态变量或函数局部域中的静态变量时,才会被初始化成0。但这种习惯上不叫“构造函数”,而叫“值初始化”。
    其它的情况下则没有任何初始化,其值是随机的。
    这一点许多C++书上都有说明(比如比较畅销的《C++ Primer》、《The C++ Programming Language》等),怎么说没有呢?
      

  8.   

    1、
    CString temp("你好");2、
    CString temp;
    temp="你好";3、
    char *temp="你好";4、
    char *temp;
    temp=new char[10];
    temp="你好";
    delete []temp;5、
    char temp[10];
    temp="你好";一般就这几种用法吧
      

  9.   

    steedhorse(晨星) ( ) 信誉:105    Blog   加为好友  2007-5-8 11:24:57  得分: 0  
        
    楼上的第4种和第5种都不好,问题跟楼主实质上相同。  
     
    //-------------------------
    你说的不好,我想问一下,为什么在很多书本实例中,他们又都用到New去申请一块这样的内存呢?