我被困在复制一个给定地址的类,我是segfaulting

时间:2014-09-15 05:59:33

标签: c++ function class pointers

我已经挣扎了一段时间,但我真的无法得到它,我只是得到了段错误。我正在尝试复制一个类,我写的副本的功能也在下面。交叉出来是我徒劳无功的组合,是时候打电话求助了

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];


}

编辑:

我忘了说这个功能被称为“场景(*设置)”

2 个答案:

答案 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是指针