首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++改错题目解决办法

2012-04-11 
C++改错题目两个改错题///file01#includeiostream#includestring.husingnamespacestdclassmystring{p

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可能本身就是多余的)
总觉得这样写怪怪的

热点排行