char *pstr = new char[1];    
char *pstring = "hello ET,welcome to our earth.";
::memcpy(pstr,pstring,5);
CString str;
str = pstr;
AfxMessageBox(str);
delete [] pstr;
pstr = NULL;
以上代码str变量中可以输出hello.

解决方案 »

  1.   

    char *pstr = new char[1]; 
    你只分配了一个字节
    ::memcpy(pstr,pstring,5);
    却给它复制了5个字节的内容,余下的那4个字节是从哪里偷来的,另外一个变量继续分配内存,那么就有可能从pstr的后一个字节开始分配,如此你觉得会有什么后果?
      

  2.   

    以上代码可以编译,但是运行到delete [] pstr;的时候出现错误内存使用越界。就是动态分配内存用new
      

  3.   

    用new分派的内存这算动态内存是在堆上申请的,所以是动态内存
      

  4.   

    先谢谢。不过我还是没有听明白一些关键的问题。呵呵。反正我可以输出hello,可我只分配了1个字节,不是很明白为什么可以输出hello这5个字节。我主要想弄明白的是这个new动态内存是否可以给他往里面拷贝比new的本身更大的空间?如果是这样,那么new char[大小] 这个还有什么意义?
      

  5.   

    new动态内存是否可以给他往里面拷贝比new的本身更大的空间
    //C/C++下是可以的。C/C++不检查内存越界的情况。如果运气好,这段内存正好没有分配给其他变量,那么一切正常;如果已经分配出去了,轻则程序逻辑不正常,重则程序崩溃。
      

  6.   

    那也就是说,最好的方法就是需要多大的空间,然后就用new去分配多大的空间,而不是去乱分配,对吧?按照实际的大小规律办事,对吧?