请高手指点这个程序有什么错误!!!!
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里的对象会导致访问非法地址的问题。