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

请这个程序有什么东东!

2012-03-05 
请高手指点这个程序有什么错误!!!!voiddoubleArray(string*&array,intsize){conststring*oldarrayarray

请高手指点这个程序有什么错误!!!!
void   doubleArray(string   *&array,   int   size)
{
  const   string   *old   =   array;
  array   =   new   string[2*size];
  memcpy(array,   old,   size*sizeof(string));
  del[]   old;
  size*=2;
}
程序的功能是把原来的数组大小变大2倍。请指出错误。谢谢。。

[解决办法]
错误出在:

memcpy( array, old, size*sizeof(string));

这句上。在C++中,对象的拷贝不能简单的用memcpy(可能有时凑巧正确)。应该用stl的copy或者这样:

for( int i = 0; i < size; i++ ) {
array[i] = old[i];
}

因为对象的拷贝不是简单的象C语言一样,对象拷贝要调用operator=操作符。如果用memcpy,那么array和old指向同一个对象,在执行del[] old后访问array里的对象会导致访问非法地址的问题。

热点排行