[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 » |