Szustarol Temat założony przez niniejszego użytkownika |
Powiększająca się tablica, crash » 2016-11-07 19:20:18 Witam! Chciałem sobie zrobić powiększająca się tablicę, o tak: #include <iostream>
using namespace std;
int main() { int * temp, * out, siz, input; siz = 0; cout << "Podaj liczby, podanie \"nie-liczby\" zatrzyma opcje podawania" << endl; for(;; ) { cout << "Podaj liczbe:" << endl; cin >> input; if( cin.bad() || cin.fail() ) break; for( int i = 0; i < siz; i++ ) { if( i == 0 ) { delete out; int * out = new int[ siz ]; } *( out + i ) = *( temp + i ); } delete temp; siz++; int * temp = new int[ siz ]; for( int i = 0; i <= siz; i++ ) { if( i < siz ) { *( 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; } }
ale niestety to się crashuje, nie mogę dojść dlaczego, wszystko wygląda okej |
|
mateczek |
» 2016-11-07 19:33:50 kasujesz zerowe tablice zanim je w ogóle utworzyłeś. próbujesz pisać coś do jeszcze nieutworzonych tablic itp itd. przykład: delete temp; siz++; int * temp = new int[ siz ];
|
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-11-07 21:20:25 #include <iostream>
using namespace std;
int main() { int * temp = new int; int * out = new int; int siz, input; siz = 0; cout << "Podaj liczby, podanie \"nie-liczby\" zatrzyma opcje podawania" << endl; for(;; ) { cout << "Podaj liczbe:" << endl; cin >> input; if( cin.bad() || cin.fail() ) break; for( int i = 0; i < siz; i++ ) { if( i == 0 ) { delete out; int * out = new int[ siz ]; } *( out + i ) = *( temp + i ); } delete temp; siz++; int * temp = new int[ siz ]; for( int i = 0; i <= siz; i++ ) { if( i < siz ) { *( 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; } }
mam teraz cos takiego, ale wszystkie wartosci sa rowne zero, dlaczego? poza tym czy da sie skierowac pointer na nowego inta osobno? chcialbym zamiast int *temp = new int; int * temp; *temp = new int; ale sie nie da |
|
Rashmistrz |
» 2016-11-07 21:31:27 Nie potrafię pojąć co to się dzieje. Co tu zachodzi i jaki wpływ ma na to przysłanianie zmiennych? int main() { int * temp, * out, siz, input;
gdzieś dalej: delete temp; siz++; int * temp = new int[ siz ]; Nie podoba mi się jedno. Jeśli wystarczająco dobrze się wczytałem, to tworzysz tablicę pod jeden element, tworzysz tablicę o jeden element większą i kopiujesz starą do nowej dodając input. BTW. Wyciągnij pierwszy krok przed pętlę. Według mnie to nie jest dobry sposób na gromadzenie nieznanej liczby liczb. OFFTOP: Zerknij na ten swój temat. Coś dopisałem: [fasm]Sektor nie jest wczytywanyEDIT: chcialbym zamiast
int * temp = new int; int * temp; * temp = new int; ale sie nie da |
Nie masz wyłuskiwać wskaźnika i przypisywać do jego wartości, a tylko przypisać wskaźnik do zmiennej wskaźnikowej... Zamiast * temp = new int; . Uzyj temp = new int; . |
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-11-07 21:44:22 Poprawiłem to co powiedziałeś z tym wyciągnięciem przed pętle, faktycznie nie pomyślałem. Poza tym, tworzę te zmienne na początku abym mógł je usunąć bez błędu
Co do offtopu, po prostu uzyłem extended write i działa jak nigdy wcześniej :D |
|
carlosmay |
» 2016-11-07 22:04:44 Chciałem sobie zrobić powiększająca się tablicę |
Dlaczego nie std::vector<> bądź std::unique_ptr<>? |
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2016-11-07 22:12:57 bo chce wiedziec jak to działa |
|
Rashmistrz |
» 2016-11-07 22:14:38 Poza tym, tworzę te zmienne na początku abym mógł je usunąć bez błędu. |
Ale mnie zastanawia ta podwójna deklaracja: int * temp, * out, siz, input; . // potem gdzieś dalej: int * temp = new int[ siz ]; . // Masz dwa int * temp! |
|
« 1 » 2 |