[C++] Zmienny rozmiar tablicy
Ostatnio zmodyfikowano 2013-04-16 22:10
ziombel3 Temat założony przez niniejszego użytkownika |
[C++] Zmienny rozmiar tablicy » 2013-04-16 21:25:32 Witam.Mam problem z programem. Kompilator nie wyświetla żadnych błędów, jednak po uruchomieniu programu wyświetla się komunikat process exited with return value 3221225725. Co jest źle? #include <iostream> #include <cstdio> #include <cstdlib> #include <ctime> using namespace std;
void wypelnij( int tab[], int n ) { for( int i = 0; i < n; i++ ) { tab[ i ] =( rand() % 1000 ); } }
void zamien( int & a, int & b ) { int temp = a; a = b; b = temp; }
void sortuj( int tab[], int n ) { int temp; for( int j = n - 1; j > 0; j-- ) { for( int i = 0; i < j; i++ ) { if( tab[ i ] > tab[ i + 1 ] ) zamien( tab[ i ], tab[ i + 1 ] ); } } }
int binarne( int poczatek, int koniec, int tab[], int szukana ) { if( poczatek <= koniec ) { int srodek =( poczatek + koniec ) / 2; if( tab[ srodek ] == szukana ) return srodek; if( tab[ srodek ] > szukana ) return binarne( poczatek, srodek, tab, szukana ); else return binarne( srodek + 1, koniec, tab, szukana ); } return - 1; }
int main( int argc, char * argv[] ) { int n, szukana; int tab[ n ]; srand( time( NULL ) ); cout << "Podaj liczbe elementow "; cin >> n; cout << "Jaka liczbe mam znalezc? "; cin >> szukana; wypelnij( tab, n ); sortuj( tab, n ); if( binarne( 0, n - 1, tab, szukana ) ==- 1 ) cout << "Elementu nie ma"; else cout << "Element jest na pozycji " << binarne( 0, n - 1, tab, szukana ) + 1; return 0; }
Program ma na celu wypełnienie tablicy elementami losowymi, posortowaniu i znalezieniu elementu podanego przez użytkownika. Czytałem w internecie że jest to powodem przepełnienia stosu. Jednak potrzebne jest mi to na maturę, dlatego chce wiedzieć o co dokładnie z tym chodzi. |
|
Monika90 |
» 2013-04-16 22:10:03 W C++ rozmiar tablicy musi być znany w czasie kompilacji(*), tzn. musi być to stała, a u ciebie jest to zmienna, w dodatku niezainicjalizowana. Jeśli chcesz mieć tablicę dynamiczną, to użyj std::vector.
(*) Niektóre kompilatory (gcc) implementują tablice o zmiennym rozmiarze (tzw. VLA), ale jest to niestandardowe rozszerzenie języka, więc lepiej użyć vectora. |
|
« 1 » |