0

这已经困扰了我将近 2 天了。我在我的类定义中有一个二维动态数组:

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;

        }
    }
} 

谁能指出为什么它是错误的?这是错误消息:“抛出异常:写访问冲突。 是 0x111013530C28FA2。”

4

2 回答 2

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::vector。

于 2018-02-02T05:09:28.123 回答
0

pixels[][2]此处未定义非零长度数组。您还需要为第一个维度指定一个数字。

于 2018-02-02T04:20:30.533 回答