[英]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 個向量的數組。 可從0
到11
索引。
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
可從0
到11
索引。 你進入UB土地。 這是你的錯誤。
對於maxNThings
任何值,它總是會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.