Zawieszanie programu bez zwracania wartości.

0

Witam napisałem dzisiaj taki program:

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int main()
{
    cout << "Ile liczb ??" << endl;
    int ile,i,l,czas;
    cin >> ile;
    clock_t start, stop;
    int tab[ile];
    l=10;
    start=clock();
    for(i=0; i<ile; i++)
    {
       tab[i]=l;
       l++;
    }
    stop=clock();

    czas=(double)(stop-start);
    cout<<czas<<endl;


    return 0;
}

gdy wprowadzę do niego liczbę większą od 99999 to mam taki błąd 960a47d26e.png

2
int* tab = new int[ile];
delete[] tab;
1

Ponieważ 4 MB na stosie wytrzyma nie każdy system operacyjny.

2
cin >> ile;
// ...
int tab[ile];

Nie można robić czegoś takiego w C++. To jest VLA z >=C99, którą to niektóre kompilatory akceptują w C++. GCC (bo zapewne używasz MinGW) alokuje taką tablicę za pomocą alloca czyli na stosie. Doprowadzasz do przepełnienia stosu, czego efekt widzisz powyżej.

Zacznij używać std::vector<int>.

0

Dzięki serdeczne

0

Ponieważ 4 MB na stosie wytrzyma nie każdy system operacyjny.
To nie jest kwestia systemu, tylko programu. Pod Windows można mieć naprawdę wielki stos, ale trzeba to ustawić w parametrach kompilatora.

Dla systemu to jest po prostu „pamięć procesu”, bez rozróżniania co jest stertą, co jest stosem itp.

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