这已经困扰了我近两天了。我在课堂上定义了一个二维动态数组:
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;
答案 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: :向量。