[c++] Problem z dodaniem obiektu do listy dwukierunkowej
Ostatnio zmodyfikowano 2014-01-02 14:28
ice25 Temat założony przez niniejszego użytkownika |
[c++] Problem z dodaniem obiektu do listy dwukierunkowej » 2014-01-01 21:05:49 Witam Może mi ktoś powiedzieć co tu zrobiłem źle że program się kompiluje ale po wprowadzeniu danych, gdy ma już dodać element do listy się zawiesza ? #include <string> #include <iostream>
using namespace std;
class student { public: string imie; string nazwisko; };
typedef struct list { struct list * next, * prev; student key; } lista;
void push( lista *& head, student x ) { lista * nowy = new lista; lista * tmp = new lista; nowy->key = x; nowy->next = NULL; if( head ) { tmp = head; while( tmp->next ) tmp = tmp->next; tmp->next = nowy; nowy->prev = head; } else { head = nowy; tmp->prev = NULL; } }
class dziekanat { public: lista * head; void DodajStudenta(); };
void dziekanat::DodajStudenta() { student * x = new student; cout << "podaj imie" << endl; cin >> x->imie; cout << "nazwisko" << endl; cin >> x->nazwisko; push( head, * x ); }
void show( lista * head ) { while( head ) { cout << head->key.imie << endl; head = head->next; } }
int main() { dziekanat lol; lol.DodajStudenta(); getchar(); getchar(); return 0; } |
|
m4snow |
wskaźnik(i) w kosmos » 2014-01-02 00:31:50 Hej. Wywala sie bowiem w funkcji push jest taka linijka: while( tmp->next ) tmp = tmp->next;
w momencie uruchomienia domyślnie tmp->next wskazuje na kosmos tak samo jak tmp->prev bo nie zainicjowałeś wskaźników w żaden sposób. I w efekcie próbujesz czytać coś do czego nie wolno ci się dobrać. najłatwiej to obejść stosując domyślny "konstruktor" struktury zerujący wskaźniki przy inicjalizacji nowej listy list(){next=0;prev=0;};
ale za cholewę nie wiem czy jest to zgodne ze sztuką.. Ale działa, nie sprawdzałem na ile poprawnie dalej. |
|
ice25 Temat założony przez niniejszego użytkownika |
» 2014-01-02 14:28:34 Wielkie dzięki właśnie chodziło o brak konstruktora :) wystarczyło dodać pomogło wstawienie konstruktora : dziekanat::dziekanat(){ head = NULL; }
|
|
« 1 » |