Powiększająca się tablica, crash
Ostatnio zmodyfikowano 2016-11-08 20:23
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-11-07 22:26:39 ale przeciez jeden usuwam wczesniej delete temp |
|
mateczek |
» 2016-11-07 23:41:40 kod raczej do przepisania na nowo. int * tab = new[ rozmiar ];
delete[] tab;
tab = nullptr;
Jak chcesz używać, to dołączę się do poprzedników i polecam std::vector. Jak chcesz napisać, to coś na wzór vectora. Czyli minimum klasa, a najlepiej szablon #include <iostream>
class mTablica { int rozmiar; int indexZapelneienia; int * tab; int base = 10; public: mTablica() { tab = new int[ base ]; rozmiar = base; indexZapelneienia = 0; } ~mTablica() { delete[] tab; } void pusback( int element ); int & operator []( int index ); int size() { return indexZapelneienia; } };
void mTablica::pusback( int element ) { if( indexZapelneienia >= rozmiar ) { int * temp = new int[ rozmiar + base ]; for( int i = 0; i < rozmiar; i++ ) { temp[ i ] = tab[ i ]; } delete[] tab; tab = temp; rozmiar = rozmiar + base; } tab[ indexZapelneienia++ ] = element; }
int & mTablica::operator []( int index ) { return tab[ index ]; }
using namespace std;
int main() { mTablica tab; for( int i = 0; i < 35; i++ ) { tab.pusback( i ); } tab[ 25 ] = 333; for( int i = 0; i < tab.size(); i++ ) { cout << tab[ i ] << " "; } }
|
|
DejaVu |
» 2016-11-08 09:02:22 for( int i = 0; i <= siz; i++ )
Wychodzisz poza zakres tablicy. |
|
pekfos |
» 2016-11-08 10:18:24 new int[1] to nie to samo co new int. Nie możesz mieszać delete z delete[]. |
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-11-08 19:48:07 DejaVu i pekfos, dzięki, teraz już działa #include <iostream>
using namespace std;
int main() { int * temp, * out, siz, input; temp = new int[ 1 ]; out = new int[ 1 ]; siz = 0; cout << "Podaj liczby, podanie \"nie-liczby\" zatrzyma opcje podawania" << endl; for(;; ) { cout << "Podaj liczbe:" << endl; cin >> input; for( int i = 0; i < siz; i++ ) { if( i == 0 ) { delete[] out; int * out = new int[ siz ]; } *( out + i ) = *( temp + i ); } if( cin.bad() || cin.fail() ) break; delete[] temp; siz++; int * temp = new int[ siz ]; for( int i = 0; i < siz; i++ ) { if( i < siz - 1 ) { *( temp + i ) = *( out + i ); } else *( temp + i ) = input; } cin.clear(); cin.sync(); } cout << endl << endl << endl << "Nastapi teraz wypisanie podanych liczb." << endl; for( int i = 0; i < siz; i++ ) { cout << i + 1 << " element tablicy to: " << *( out + i ) << "." << endl; } }
|
|
mateczek |
» 2016-11-08 20:23:50 trochę Ci skróciłem kod #include <iostream> using namespace std; int main() { int siz = 0, input; int * tablica = new int[ siz ]; cout << "Podaj liczby, podanie \"nie-liczby\" zatrzyma opcje podawania" << endl; while( cin >> input ) { cout << "Podaj liczbe:" << endl; int * temp = new int[ siz + 1 ]; for( int i = 0; i < siz; i++ ) { temp[ i ] = tablica[ i ]; } temp[ siz++ ] = input; delete[] tablica; tablica = temp; } cout << endl << endl << endl << "Nastapi teraz wypisanie podanych liczb." << endl; for( int i = 0; i < siz; i++ ) { cout << i + 1 << " element tablicy to: " << tablica[ i ] << "." << endl; } } //albo tak #include <iostream> using namespace std; int main() { int siz = 0, input; int * tablica = nullptr; cout << "Podaj liczby, podanie \"nie-liczby\" zatrzyma opcje podawania" << endl; while( cin >> input ) { cout << "Podaj liczbe:" << endl; int * temp = new int[ siz + 1 ]; for( int i = 0; i < siz; i++ ) { temp[ i ] = tablica[ i ]; } temp[ siz++ ] = input; if( tablica ) delete[] tablica; tablica = temp; } cout << endl << endl << endl << "Nastapi teraz wypisanie podanych liczb." << endl; for( int i = 0; i < siz; i++ ) { cout << i + 1 << " element tablicy to: " << tablica[ i ] << "." << endl; } }
|
|
1 « 2 » |