przy kończeniu programu pojawia się break

0

Mam taki kod programu:

#include<iostream>

using namespace std;

template <typename T>
T max5(T a[], int n = 5);

int main()
{
	double tab[4];
	cout<< "Podaj piec liczb do tablicy: " << endl;
	for (int i = 0; i < 5; i++)
	{
		cin>>tab[i];
	}
	double wynik = max5(tab);
	cout<< "Najwyzsza liczba podana w tej tablicy wynosi: "<< wynik << endl;
	cin.get();
	cin.get();
	return 0;
}

template <typename T>
T max5(T a[], int n)
{
	T maX = 0;
	for (int i = 0; i < 5; i++)
	{
		if (a[i] > maX)
		{
			maX = a[i];
		}
	}
	return maX;
}

Program ma za zadania z podanej przez użytkownika tablicy wybrać największą wartość. Program to robi i nawet pokazuję, ale przy zakończeniu programu wyświetla break'a o takim komunikacie: Run-Time Check Failure #2 - Stack around the variable 'tab' was corrupted.
Może ktoś powiedzieć dlaczego?

1

bo twoja tablica tab ma tylko 4 elementy

1

Najpierw robisz:

  double tab[4];

A później:

for (int i = 0; i < 5; i++) { cin>>tab[i]; }

i tak samo w max5.

Kompilator to Twój przyjaciel, jesli pisze że 'stack corrupted'(**) to chce Ci pomóc ;]

* -stos - miejsce gdzie są przechowywane lokalne zmienne - uszkodzony, czyli zapisałeś tam gdzie nie powinieneś. W tym przypadku akurat program działa, ale takie błędy są bardzo niebezpieczne bo często trudno je wykryć - dlatego podziękuj kompilatorowi jeszcze raz.

0

Dzięki, już wiem. Człowiek nie widzi takich głupich błędów

MSM, dzięki za wytłumaczenie tego komunikatu, teraz będę wiedział co i jak :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1