[英]C++ Dynamic Array Write Access Violation
這已經困擾了我近兩天。 我在類定義中有一個二維動態數組:
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.