簡體   English   中英

C ++動態數組寫訪問沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM