Zgłoszono nieobsługiwany wyjątek: naruszenie dostępu do zapisu.
Ostatnio zmodyfikowano 2020-04-01 17:27
Gromorth Temat założony przez niniejszego użytkownika |
Zgłoszono nieobsługiwany wyjątek: naruszenie dostępu do zapisu. » 2020-04-01 16:55:33 Pisze program tworzacy dwa stosy, do pierwszego sam wpisuje z klawiatury 10 liczb, a drugi ma mi je wypisac, a po tej akcji mieć zawartosc taką samą jak przed wypisaniem. Problem tworzy sie przy funkcji push, choc to pewnie problem z czyms innym oto moj kod: #include <iostream> #include <cstdlib> #include <cstdio>
using namespace std;
class stos { public: int size; int teraz; int * element; void init( stos & Stos, int a ) { Stos.size = a; Stos.element = new int[ a ]; } void destroy( stos & Stos ) { delete[] Stos.element; } void push( stos & Stos, int b ) { if( Stos.teraz < Stos.size ) { Stos.element[ Stos.teraz ] = b; Stos.teraz = Stos.teraz + 1; } else { cout << "Stos pelny"; } } void pop( stos & Stos ) { if( Stos.teraz > 0 ) { Stos.teraz = Stos.teraz - 1; } else cout << "Stos pusty"; } int top( stos & Stos ) { if( Stos.teraz > 0 ) { cout << Stos.element[ Stos.teraz - 1 ] << endl; return Stos.element[ Stos.teraz - 1 ]; } else cout << "Stos pelny"; } bool empty( stos & Stos ) { if( Stos.teraz != 0 ) { cout << "Stos nie pusty"; return true; } else { cout << "Stos pusty"; return false; } } bool full( stos & Stos ) { if( Stos.teraz == Stos.size ) { cout << "Stos pelny"; return true; } else { cout << "Stos nie pelny"; return false; } } };
int main() { stos jeden; stos dwa; jeden.init( jeden, 10 ); dwa.init( dwa, 10 ); int los; for( int i = 0; i < 10; i++ ) { cout << endl << "Podaj " << i + 1 << " liczbe:"; cin >> los; jeden.push( jeden, los ); } for( int i = 0; i < 10; i++ ) { dwa.push( dwa, jeden.top( jeden ) ); jeden.pop( jeden ); } return 0; }
|
|
pekfos |
» 2020-04-01 17:01:10 Składowa teraz nie jest zainicjalizowana. Po co ten pierwszy argument we wszystkich metodach? Bieżący obiekt jest przekazany do niestatycznych metod z definicji. To powinno być jeden.init(10). |
|
Gromorth Temat założony przez niniejszego użytkownika |
nie do końca rozumiem » 2020-04-01 17:11:42 czyli jak mam ta zmienna zainicjalizowac, bo to chyba nie jest to aby zrobic ją const i czy zmiana tych jeden.init(jeden,10) jest konieczna? |
|
pekfos |
» 2020-04-01 17:21:02 czyli jak mam ta zmienna zainicjalizowac, bo to chyba nie jest to aby zrobic ją const |
Nadaj jej wartość początkową. Zero ma tu sens, w init(). czy zmiana tych jeden.init(jeden,10) jest konieczna? |
Nie.. Tak samo jak pisanie poprawnego kodu nie jest konieczne. Ten argument to bezużyteczna redundancja. Więcej pisania i sposób na popełnienie trudnego do znalezienia błędu. Gdyby kod był dłuższy, a błąd nie był oczywisty, każdy normalny programista powiedziałby, żebyś wrócił gdy powywalasz te głupie argumenty. Inaczej trzeba by wszędzie sprawdzać, czy nie strzeliłeś się nimi w stopę. |
|
Gromorth Temat założony przez niniejszego użytkownika |
Zamykam » 2020-04-01 17:27:20 Dzięki wielkie, nastepnym razem postaram się pisać bez strzelania sobie w stope :D |
|
« 1 » |