C ++动态数组写访问冲突

时间:2018-02-02 04:16:43

标签: c++ flexible-array-member

这已经困扰了我近两天了。我在课堂上定义了一个二维动态数组:

class Raster {

public:
    int pixels[][4];

    void drawTriangle(Vector2f & V1, Vector2f & V2, Vector2f & V3, PixelColor & colorA, PixelColor & colorB, PixelColor & colorC);

};

在我的绘图方法中,我有这个循环

for (int Y = maxY; Y >= minY; Y--) {
    for (int X = minX; X <= maxX; X++) {
        float lambda1;
        float lambda2;
        float lambda3;
        triangle.getBarycentricCoordinate(X, Y, &lambda1, &lambda2, &lambda3);
        if ((0.0f <= lambda1 && 0.0f <= lambda2 && 0.0f <= lambda3)) {
            PixelColor a = lambda1 * colorA;
            PixelColor b = lambda2 * colorB;
            PixelColor c = lambda3 * colorC;
            PixelColor interpolatedColor = a + b + c;
            pixels[Y*width + X][0] = interpolatedColor.R;
            pixels[Y*width + X][1] = interpolatedColor.G;
            pixels[Y*width + X][2] = interpolatedColor.B;

        }
    }
} 

有谁可以指出为什么这是错的?以下是错误消息:&#34;抛出异常:写入访问冲突。 为0x111013530C28FA2。&#34;

2 个答案:

答案 0 :(得分:0)

pixels[][2]这里没有定义非零长度数组。您还需要为第一个维度指定一个数字。

答案 1 :(得分:0)

我不认为这是一个动态阵列。

当您声明一个数组时,您还需要声明它的大小。您可以通过创建它的数据以及数据来确定它是什么类型的数组。 例如,在以下代码中:

// Here we can see that the array is a 4X3.
int pixels[][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} };

这样可以正常工作,因为可以理解数组的大小。

此外,我想补充一点,如果你真的想要一些不受大小限制的东西,并希望大小是动态的,这取决于你拥有的数据,那么你可以使用标准模板库提供的各种容器,例如std: :向量。