Последний цикл для переполнится, когда i = size-1
В вашем вопросе вы хотите получить сумму между двумя соседними числами. Ваша логика в последнем цикле для говорит, что вы вычисляете сумму, добавляя число i к i + 1 . Последний элемент в вашем массиве находится в позиции size-1 , поэтому при попытке добавить это к следующему соседнему числу (size-1) + 1 переполняет массив.
Чтобы устранить эту проблему, ваш последний цикл for должен продолжаться только до i , вот так ...
for (int i = 0; i < size-1; i++) {
if (num[order[i]] + num[order[i + 1]] > largestsum) {
largestsum = num[order[i]] + num[order[i + 1]];
}
}
С этой фиксированной логикой самый большой элемент в цикле для равен size-2 , и когда вы добавляете к нему 1 (для следующего соседнего числа), он выберет item (size-2) + 1 , который является последним элементом в массиве, а не переполняет массив.