Во-первых, вы должны использовать отладчик, вы бы сразу обнаружили ошибку.
Во-вторых, 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
.