Problem z Kodem

0

Witam mam problem z pętlą for oraz tablicą. Siedzę nad kodem już dobra godzinę i nic nie mogę wymyślić. Zamysł programu to wylosowanie 10 liczb a następnie wpisaniu ich do tablic niestety dzieje się coś czego nie rozumiem gdy próbuję wyświetlić tablice program wywala mi o wiele więcej licz niż 10

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
    int tab[9], i=0;
    srand(time(0));

    for(i = 0; i <=9;i++)
    {
        tab[i]= rand()%9+1;
        cout<<tab[i];

    }

    return 0;
}

Dodam że na kompilatorze online wszystko działa jak powinno pozdrawiam

3

Zrobiłeś tablicę na 9 liczb a starasz się wpisać 10.
Próba wytłumaczenia UB: prawdopodobnie kompilator umieścił zmienną i zaraz za tablicą i w ostatnim kroku ta zmienna jest nadpisywana.

1

Zarezerwowałeś tablicę na dziewięć elementów, tab[9], a Próbujesz do niej zapisać elementów dziesięć, for(i = 0; i <=9;i++); czyli UB.

0

Jezu dziękuję bardzo za oświecenie mnie dopiero teraz to zauważyłem pozdrawiam!

2

Na marginesie - jeśli zamiast tego będziesz używał std::array i .at(), to nie będziesz musiał się domyślać o co chodzi w razie wyjścia poza zakres tablicy :)

#include <iostream>
#include <array>
using namespace std;

int main() {
	array<int, 9> arr;
	cout << arr.at(9);
	return 0;
}

https://ideone.com/zCfoCc

terminate called after throwing an instance of 'std::out_of_range'
  what():  array::at: __n (which is 9) >= _Nm (which is 9)

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