for (int i = 0; i < 20; i += 2) {
temp = *ptchet;
*ptchet = *ptnechet;
*ptnechet = temp;
ptchet += 2;
ptnechet += 2;
}
Ты используешь два указателя и сдвигаешь их на +=2 на каждой итерации. Но ptnechet указывает на arr[1], а дальше сдвигается вперёд, и в последний проход (i=18) оба указателя будут указывать на:
ptchet → arr[18] (нормально)
ptnechet → arr[19] (тоже окей)
НО после выполнения ptchet += 2 и ptnechet += 2, они станут:
ptchet → arr[20] выход за пределы массива!
ptnechet → arr[21] ещё хуже
А в следующей итерации (i = 20), ты снова заходишь в цикл, но arr[20] не существует (у тебя int arr[20];, индексы — от 0 до 19), и ты получаешь ошибку доступа к памяти — вот она и есть.
? Вывод:
У тебя всё правильно с логикой, просто последняя итерация заходит за границу массива.
Исправь условие цикла или добавь if, и всё будет работать.
Ошибка 0xC0000005 = всегда выход за пределы памяти или попытка записи в запрещённую область.