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

c++ primer里面的一个小疑点

2012-04-06 
c++ primer里面的一个小问题。这个小程序来自c++primer第四版的电子版第四章,其中计算字符串长度的时候有一

c++ primer里面的一个小问题。
这个小程序来自c++   primer   第四版的电子版第四章,其中计算字符串长度的时候有一个bug,所以拷贝的时候,目标字符串长度不够。我的问题是strcpy()的错误,为什么会导致delete出错,从而导致整个程序的崩溃呢?

#include   <cstring>
//#include   <string>

//using   std::string;

void   main()  
{

      const   char   *pc   =   "a   very   long   literal   string ";
      const   size_t   len   =   strlen(pc+1);  
      char   *pc2   =   new   char[len   +   1];  
      strcpy(pc2,   pc);                            
      if   (strcmp(pc2,   pc))                    
            ;       //   do   nothing
      delete   []   pc2;          

/*
      string   str( "a   very   long   literal   string ");
      string   str2   =   str;  
      if   (str   !=   str2)                      
            ;     //   do   nothing
*/
}

[解决办法]
mark
[解决办法]
lz上面的程序会崩溃的吗?
[解决办法]
strcpy并不判断是否有非法的内存被占用,

所以当用它导致了占用非法内存时不会出问题.

而在释放内存时,

系统会发现有的地方的内存不能释放,

因为它不是被new出来的,

而是系统自已的保护的内存,

所以这时要报内存使用错误

热点排行
Bad Request.