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出来的,
而是系统自已的保护的内存,
所以这时要报内存使用错误