我已经挣扎了一段时间,但我真的无法得到它,我只是得到了段错误。我正在尝试复制一个类,我写的副本的功能也在下面。交叉出来是我徒劳无功的组合,是时候打电话求助了
class Scene
{ private:
int max;
int* x_row, *y_col; // maximum and min coordinates of each image
Image**image_layers;
}
void Scene::_copy(const Scene &source)
{
max = source.max;
x_row = new int[source.x_row];
y_col = new int[source.y_col];
image_layers = new Image*[source.max];
for(int i = 0; i < source.max; i++)
{
if(source.image_layers[i] != NULL)
{
//image_layers[i] = new Image(*(source.image_layers[i]));
// image_layers[i] = new Image;
//*image_layers[i] = *source.image_layers[i];
// image_layers[i] = source.image_layers[i];
}
else
{
image_layers[i] = NULL;
}
x_row[i] = source.x_row[i];
y_col[i] = source.y_col[i];
}
编辑:
我忘了说这个功能被称为“场景(*设置)”
答案 0 :(得分:0)
段错误发生在这里或因为:
x_row = new int[source.x_row];
y_col = new int[source.y_col];
在右侧,您使用地址source.x_row
作为数组大小。这是一个非常大的数字,很可能会导致分配失败。
您需要保留一个成员来保持大小或更好,而是使用std::vector<int>
对象。
使用memcpy可以更快地复制C数组。使用C ++向量,您只需将一个分配给另一个:
x_row = source.x_row
与该问题无关,但此函数应命名为operator=
,通过将一个实例分配给另一个实例,可以更轻松地使用该类:
Scene & Scene::operator=(const Scene &source)
{
// copy elements
...
return *this;
}
答案 1 :(得分:-2)
x_row = new int[source.x_row];
y_col = new int[source.y_col];
您确定上面的代码吗?
source.x_row
是指针