C++改错题目
两个改错题
///file 01
#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;
char* str1 = "hello, andylin ";
char str2[20] = "\0 ";
void foo(char* a, char* b, int len)
{
switch (len & 0x7)
{
default:
while (len > 7)
{
len -= 8;
*b++ = *a++;
case 7:
*b++ = *a++;
case 6:
*b++ = *a++;
case 5:
*b++ = *a++;
case 4:
*b++ = *a++;
case 3:
*b++ = *a++;
case 2:
*b++ = *a++;
case 1:
*b++ = *a++;
}
}
}
int main()
{
foo(str1, str2, strlen(str1));
cout < < "str1 = " < < endl;
cout < < str1 < < endl;
cout < < "str2 = " < < endl;
cout < < str2 < < endl;
}
[解决办法]
class mystring
{
public:
char* pdata;
mystring(int len)
{
//pdata = new char(len);
pdata = new char[len]; //这样才是分配数组
}
};
[解决办法]
new 和 malloc 不太一样吧
[解决办法]
修改如下:
一个一个来吧,第一个:
///file 01
#include <iostream>
#include <string.h>
using namespace std;
class mystring
{
public:
char* pdata;
mystring(int len)
{
pdata = new char(len); //这只是开辟一个空间,要改成
//pdata=new char[len];
}
};
char* fun(mystring** array, int len)//*array没有被释放,将导致内存泄露,所以将函数返回
{ //值改成char*
mystring* old = *array;
*array = new mystring(2*len); //这也是一样,改为*array = new mystring[2*len]
memcpy(*array, old, len);
delete old; //要释放的是内存数组,改为delete []old;
return *array; //返回它
}
int main()
{
mystring str(20);
mystring* pstr = &str;
mystring** ppstr = &pstr;
strcpy(str.pdata, "hello, andylin ");
char *xx=fun(ppstr, 20); //接收并释放内存
delete []xx;
return 0;
}
[解决办法]
我试了一下上面的switch……
只执行一次选择……
以后每次while循环的时候并不进行选择……
这样的话用switch没什么价值吧?!
如果加了break的话就没必要写成这样子……
while就是多余的……(while可能本身就是多余的)
总觉得这样写怪怪的