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