我遇到一个问题,同样是动态分配,但是第一种当机,第二种不当机。
请各位多多指点,谢谢!




以下是第一种情况的代码简单介绍
class B{
...
char c[1024*100+1];
...


B(){};
~B(){};
void f()
{
...
char * str;
int nlength;
...
memcpy(c, str, nlength);  //这里出现当机  nlength小于1024*100
...
};
};


class A{
void f()
{
  char c[1024*100+1];
  ...
  B * b = new B();
  b->f(); 
  ...
}
};


int main()
{
  A *a;
  a=new A();
  a.f();
  delete a;
  
}


以下是修改后的代码,第二种代码,主要是把字符数组修改为字符指针




class B{
...
char * c;
...


B(){c=new char[1024*100+1]};
~B(){delete c;};
void f()
{
...
char * str;
int nlength;
...
memcpy(c, str, nlength);  
...
};
};


class A{
void f()
{
  char c[1024*100+1];
  ...
  B * b = new B();
  b->f(); 
  ...
}
};


int main()
{
  A *a;
  a=new A();
  a.f();
  delete a;
  
}