一道C++笔试题解决方法

一道C++笔试题
指出下面程序的错误:
#include <iostream>
#include <string.h>
using namespace std;
class mystring
{
public:
 
 char* pdata;
 mystring(int len)
 {
  pdata = new char(len);
 }
};

void fun(mystring** array, int len)
{
 mystring* old = *array;
 *array = new mystring(2*len);
 memcpy(*array, old, len);
 delete old;
}

int main()
{
 mystring str(20);
 mystring* pstr = &str;
 mystring** ppstr = &pstr;
 strcpy(str.pdata, "hello, andylin");
 fun(ppstr, 20);
 return 0;
}

指点一下~

------解决方案--------------------
C/C++ code


class mystring 
{ 
public: 
  
 char* pdata; 
 mystring(int len) 
 { 
  pdata = new char[len+1]; 
 } 
 ~mystring()
 {
     if (pdata)
     {
         delete []pdata;
     }
 }
}; 

//*array需要你手动去释放
void fun(mystring** array, int len) 
{ 
    mystring* old = *array; 
    *array = new mystring(2*len); 
    memcpy(*array, old, len); 
    //old指向的str,是栈上的,不能delete
    //delete old; 
} 

int main() 
{ 
 mystring str(20); 
 mystring* pstr = &str; 
 mystring** ppstr = &pstr; 
 strcpy(str.pdata, "hello, andylin"); 
 fun(ppstr, 20); 
 return 0; 
}