读书人

请这个程序有什么东东!

发布时间: 2012-03-05 11:54:02 作者: rapoo

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

读书人网 >C++

热点推荐