Podczas wczytywania wartości do tablicy wychodzisz poza jej zakres (gift[10] jest poza tablicą). Liczenie średniej było niepoprawne. Podczas kopiowania wartości większych od średnich do nowej tablicy powinieneś użyć zmiennej ile, a nie j. Poprawiłem też kilka innych rzeczy:
#include <iostream>
#include <limits>
int main() {
const int max = 10;
double gifts[max], sum = 0;
std::cout << "Ile chcesz wplacic, podaj 10 wartosci: \n";
for (int i = 0; i < max; i++) {
std::cout << "Proszę podać " << i + 1 << " wartosc: ";
while (!(std::cin >> gifts[i])) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "UPS podales zlom wartosc nieliczbowom. Sprobuj jeszcze raz: ";
}
sum += gifts[i];
}
// obliczanie sredniej dopiero po zakonczeniu petli:
double average = sum / max; // jak double to trzymajmy sie go do konca
int greater_size = 0;
double greater_than_avg[max];
for (int j = 0; j < max; j++) {
if (average < gifts[j]) {
greater_than_avg[greater_size] = gifts[j]; /* osobny iterator
dla drugiej tablicy, bo wartosci chcesz
miec od 0 do greater_size, a nie rozlozone jak
w pierwszej tablicy
*/
greater_size++;
}
}
std::cout << "\n\nSrednia wynosi: " << average << std::endl;
for (int k = 0; k < greater_size; k++) {
std::cout << "\nLiczba wyzsza niz srednia to " << greater_than_avg[k];
}
}