Нарушение доступа к записи в динамическом массиве C++

Это беспокоило меня почти 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."

2 ответа

pixels[][2] не определяет массив ненулевой длины здесь. Вам также нужно указать число для первого измерения.

Я не думаю, что это динамический массив.

Когда вы объявляете массив, вы должны также объявлять его размер. Вы можете определить, что это за массив, по тому, как вы его создали, и каковы данные. Например, в следующем коде:

// 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.

Другие вопросы по тегам