C++字符串类 重载=号运算符释放程序崩溃

String t4("da huai dan");
t4 = "hello world";

String& String::operator=(char *p)
{
if (this->p != NULL)
{
delete[] this->p;
this->p = NULL;
this->len = 0;
}

    this->len = strlen(p);
    this->p = new char[this->len];
    strcpy(this->p, p);


return *this;

}

String::~String()
{
if (this->p != NULL) {
delete [] this->p;
this->p = NULL;
this->len = 0;
}
cout << "一个 已经被释放" << endl;

http://blog.csdn.net/cherry_ermao/article/details/46399857

首先strlen 计算的是C风格字符串从第一个字符到结束字符‘\0’之前的一段字符的个数。 也就是说你计算出来的长度实际上是少计算了结束符的。
导致少分配了一个字节的内存,拷贝的时候你分配的内存容不下你要拷贝的内存长度,所以溢出报错了崩溃了。