C++ dynamiczna alokacja tablic struktur
Ostatnio zmodyfikowano 2016-03-24 11:31
sebuzinski Temat założony przez niniejszego użytkownika |
C++ dynamiczna alokacja tablic struktur » 2016-03-24 10:48:38 Witam, to mój pierwszy post na forum :) Proszę o wyrozumiałość. Rozpoczynam naukę dynamicznej alokacji pamięci i stworzyłem poniższy program, niestety metodą wielu prób i błędów. Program się kompiluje, ale nie wiem czy to dobrze :) Nadal mam kilka niejasności i problemów, przez które nie mogę przebrnąć. Program ma za zadanie dodawać do listy kolejne połączenia. < div > using namespace std;
struct dane { int nr; int dt; }; void wyswietl( dane lista[], int ile ); void dodaj( dane lista[], int & ile );
main() { int ile = 0; dane * lista = NULL; lista = new dane[ ile ]; cout << "wybierz operacje\n"; int x; while( x != 3 ) { cout << "1. wyswietl liste\n"; cout << "2. dodaj numer\n"; cout << "3. zamknij program\n"; cin >> x; switch( x ) { case 1: { wyswietl( lista, ile ); break; } case 2: { dodaj( lista, ile ); break; } case 3: { exit( 1 ); } } } }
void dodaj( dane lista[], int & ile ) { dane * zast = new dane[ ile ]; for( int i = 0; i < ile; i++ ) { zast[ i ].nr = lista[ i ].nr; zast[ i ].nr = lista[ i ].dt; } ile++; for( int i = 0; i < ile - 1; ++i ) { lista[ i ].nr = zast[ i ].nr; lista[ i ].dt = zast[ i ].nr; } cin >> lista[ ile ].nr; cin >> lista[ ile ].dt; }
void wyswietl( dane lista[], int ile ) { for( int i = 1; i < ile + 1; i++ ) { cout << "osoba:" << i << endl; cout << lista[ i ].nr << endl; cout << lista[ i ].dt << endl; } } </ div >
|
|
carlosmay |
» 2016-03-24 11:05:29 Program się kompiluje, ale nie wiem czy to dobrze :) Nadal mam kilka niejasności i problemów, przez które nie mogę przebrnąć. |
Z czy konkretnie jest problem. Pierwsze z brzegu. Tablica ma rozmiar 0. int ile = 0; dane * lista = NULL; lista = new dane[ ile ];
|
|
|
j23 |
» 2016-03-24 11:31:48 Nie, bo niby dlaczego miałaby być powiększona? ile i lista to dwie różne zmienne. Poprawny algorytm wygląda tak: 1. stwórz tablicę ile+1 elementową. 2. skopiuj ile elementów ze starej tablicy do nowej. 3. usuń starą tablicę. 4. powiększ ile o jeden. 5. zwróć nową tablicę. |
|
« 1 » |