Segmentation fault - stosy
Ostatnio zmodyfikowano 2009-10-31 15:51
akasza666 Temat założony przez niniejszego użytkownika |
Segmentation fault - stosy » 2009-10-30 23:50:54 Witam! Chciałam napisać program, który sprawdza czy da się ustawić wagony pociągu w kolejności za pośrednictwem 2 bocznic. Każda bocznica byłaby stosem, jednak po uruchomieniu mojego programu wyskakuje błąd z tematu. Tak prezentuje się mój kod: #include<cstdio> #include<stack> main() { int n, i, x = 0; bool z = 0; std::stack < int > A; std::stack < int > B; scanf( "%d", & n ); int a[ n + 1 ]; for( i = 1; i <= n; i++ ) scanf( "%d", & a[ i ] ); for( i = 1; i <= n; i++ ) { if(( A.empty() ) ||( A.top() > a[ i ] ) ) A.push( a[ i ] ); else if(( B.empty() ) ||( B.top() > a[ i ] ) ) B.push( a[ i ] ); else { printf( "NIE" ); z = 1; break; } if(( A.top() - 1 == x ) &&( A.empty() == false ) ) { x = A.top(); A.pop(); } if(( B.top() - 1 == x ) &&( B.empty() == false ) ) { x = B.top(); B.pop(); } } if( z == 0 ) printf( "TAK\n" ); }
Dlaczego nie mogę odwoływać się do topu drugiego stosu?? |
|
malan |
» 2009-10-31 01:13:05 ( B.top() - 1 == x ) Jeśli przez ten zapis chcesz dostać się do przed ostatniego elementu stosu to nie jest to (raczej) nie możliwe. Mi się wydaje, że lepiej by tu spełniała zadanie dynamiczna tablica, ( tzn. std::vector<int>B ), np.: std::vector < int > B;
if(( B[ B.size() - 2 ] == x ) && B.empty() == false ) { }
Jeśli chcesz od ostatniego elementu odjąć '1' to spróbuj tak: if((( B.top() ) - 1 == x ) &&
.chociaż to wiele nie zmienia. |
|
DejaVu |
» 2009-10-31 06:14:49 Z bardzo prostego powodu: stos jest pusty, a Ty chcesz otrzymać referencję na element znajdujący się na szcycie stosu (czytaj: top() nie może być wołany, jeśli stos jest pusty). |
|
akasza666 Temat założony przez niniejszego użytkownika |
» 2009-10-31 11:52:19 Dziękuje za rady. Okazało się, że po zamianie kolejności warunków (empty i top) program śmiga. Dopiero zaczynam przygodę ze stosami itp. Wydawało mi się że kolejność warunków złożonych jest dowolna, a jednak :D głupi błąd. Dziękuje! |
|
dmx81 |
» 2009-10-31 12:35:00 witam, troszke sie "wtrace" do tematu, chcialem zapytac, czy ow problem jest omowiony gdzies w kursach? jestem troszke po polowie kursu c++, a wiekszosc zapisow jest dla mnie calkowicie nowa - top itd, czy w nastepnych lekcjach jest to omowione, czy raczej powinienem szukac w innych zrodlach, dzieki. |
|
DejaVu |
» 2009-10-31 15:51:26 |
|
« 1 » |