一道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;
}
指点一下~
------解决方案--------------------
指出下面程序的错误:
#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; }