Co się stanie gdy tak zrobię? Jakie będą konsekwencje wywołania kodu?

0

Hey, mam pytanie jakie będą konsekwencje wywołania następującego kodu:

#include <iostream>
class boom
    {
    public:
        boom()
            {
            new_boom = new boom;
            }
        boom* new_boom;
    };

int _tmain(int argc, _TCHAR* argv[])
    {
    boom BOOM;

    cout << "co się dzieje?" << endl;
    //-----

    getchar();
    return 0;
    }
1

Konsekwencją takiego tytułu będzie kosz.

W kodzie mas nieskończoną rekurencję, więc program się wywala z błędem stackoverflow.

1

Program w tej dokładnie postaci się nie kompiluje, ale po poprawieniu błędów…

        boom()
            {
            new_boom = new boom;
            }

Pomyślałby człowiek, że nieskończone tworzenie obiektu spowoduje w końcu brak pamięci na kolejne new.
Ale program wywali się znacznie, znacznie wcześniej niż to nastąpi.
Każde rekurencyjne wywołanie konstruktora powoduje odłożenie adresu powrotu na stos. Stos to obszar pamięci dość ograniczony (kilka mega) na zmienne lokalne i adresy powrotu z wywołań funkcji.

Unhandled exception at 0x77A22C36 (ntdll.dll) in boom.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00312FFC).

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