簡體   English   中英

C++ 訪問沖突讀取位置 0xFFFFFFFFFFFFFFFF 在動態向量數組中

[英]C++ Access violation reading location 0xFFFFFFFFFFFFFFFF in dynamic array of vectors

這段代碼是這樣說的:(代碼試圖填充外觀數組直到 100)我在 arrayOne[0].numberOfThings 中修復了向量數組的大小,因為我知道它是它可以包含的最大項目數,你可以將其視為已知整數。

int max = 100;
int maxNThings = arrayOne[0].numberOfThings; //Integer that I know and I pickit as the max for dynamic array
    vector<Thing>* appearanceArrayOfNumThings;
    appearanceArrayOfNumThings= new vector<Thing>[maxNThings];
    for (int i = 0; i<max;i++){
        int currentNumberOfThings = arrayOne[i].numberOfThings;
        appearanceArrayOfNumThings[currentNumberOfThings ].push_back(arrayOne[i]);
    }

我有

訪問沖突讀取位置 0xFFFFFFFFFFFFFFFF

在for語句中,行appearanceArrayOfNumThings[currentNumberOfThings ].push_back(arrayOne[i]);

我在想是否是因為我不知道的矢量行為。

你能給我任何線索或者你看到我做錯了什么嗎?

首先,您應該使用調試器,您會立即發現錯誤。

其次, new vector<Thing>[maxNThings]是個主意。 不要那樣做 至少使用std::vector<std::vector<Thing>> 在我看來,包含向量的結構向量更清晰。

使用向量向量,您可以使用.at()來告訴您的錯誤。


此代碼將始終調用未定義的行為。

int maxNThings = arrayOne[0].numberOfThings;

讓我們暫時假設這個數字是12

appearanceArrayOfNumThings = new vector<Thing>[maxNThings]; // 12

這將創建一個包含 12 個向量的數組。 可從011索引。

for (int i = 0; i < max ;i++){
    // ...
}

對於第一次迭代, i等於0 讓我們繼續。

// i == 0
int currentNumberOfThings = arrayOne[i].numberOfThings;

此時, arrayOne[i]arrayOne[0]值相同,因為i等於0 所以currentNumberOfThings等於12 ,也就是maxNThings

appearanceArrayOfNumThings[currentNumberOfThings ]

此訪問appearanceArrayOfNumThings[12]超出范圍,因為appearanceArrayOfNumThings可從011索引。 你進入UB土地。 這是你的錯誤。

對於maxNThings任何值,它總是會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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