使用C ++将堆栈中的数组数组复制到堆中的数组数组中

时间:2012-11-02 12:47:52

标签: c++ pointers

好的,所以我有一个模型类,它包含指向(将会是)一个point3对象数组的指针:

point3* _vertices_colors;

Point3具有以下typedef:

typedef GLfloat point3[3];

基本上将point3对象数组作为数组数组。然后在派生类的构造函数中,我为我想要存储的顶点和颜色的数量分配内存,如下所示:

_vertices_colors = new point3[16];

这意味着我的对象有8个顶点,并存储了自己的颜色。然后我在堆栈上定义以下数组,准备复制到指针:

point3 verticesColors[] = {
                            {1.0, 1.0, 1.0}, {1.0, 0.0, 0.0},
                            {-1.0, 1.0, 1.0}, {1.0, 0.0, 0.0},
                            {-1.0, -1.0, 1.0},{1.0, 0.0, 0.0},
                            {1.0, -1.0, 1.0},{1.0, 0.0, 0.0},
                            {1.0, 1.0, -1.0}, {1.0, 0.0, 0.0},
                            {-1.0, 1.0, -1.0}, {1.0, 0.0, 0.0},
                            {-1.0, -1.0, -1.0},{1.0, 0.0, 0.0},
                            {1.0, -1.0, -1.0},{1.0, 0.0, 0.0}
                        };

然后,我使用for循环复制到堆上的数组:

for(int i = 0; i < 16; i++)
{
    *_vertices_colors[i,0] = *verticesColors[i, 0];
    *_vertices_colors[i,1] = *verticesColors[i, 1];
    *_vertices_colors[i,2] = *verticesColors[i, 2];

    printf("%15f", *_vertices_colors[i,0]);
    printf("\t");
    printf("%15f", *_vertices_colors[i,1]);
    printf("\t");
    printf("%15f", *_vertices_colors[i,2]);
    printf("\n");
}

但是,这似乎为数组的16行中的每一行分配1.0,1.0,-1.0。我已经尝试过将指针分配给数组的其他方法,例如行:

_vertices_colors = verticesColors;

由于verticesColors是一个指向数组的常量指针,我认为这样可行,但它会产生相同的结果。我也尝试过使用memcpy:

memcpy(_vertices_colors, verticesColors, sizeof(_vertices_colors));

但这似乎会产生一些无法控制的结果。它将每个第一列分配为1.0,其余列为非常大的负整数。谁能明白为什么我的第一种方法不起作用?

1 个答案:

答案 0 :(得分:5)

*_vertices_colors[i,0] = *verticesColors[i, 0];
*_vertices_colors[i,1] = *verticesColors[i, 1];
*_vertices_colors[i,2] = *verticesColors[i, 2];

相当于

*_vertices_colors[0] = *verticesColors[0];
*_vertices_colors[1] = *verticesColors[1];
*_vertices_colors[2] = *verticesColors[2];

在数组预订中使用序列运算符,,它生成序列的最后一个值。在这种情况下为0,1和2.

多维数组以

的形式访问
_vertices_colors[i][0] = verticesColors[i][0];