[C] przekazywanie wskaźników do funkcji
Ostatnio zmodyfikowano 2013-10-08 16:49
Katruf Temat założony przez niniejszego użytkownika |
[C] przekazywanie wskaźników do funkcji » 2013-10-08 16:18:29 witam piszę program w którym muszę zaimplementować własny stos od strony teoretycznej nie mam problemu ale pojawia się problem z funkcją dodającą na stos, przy każdym wywołaniu zachowuje się tak jakby dostawała pusty stos, proszę mi powiedzieć co w niej jest źle typedef struct element { char symbol; struct element * kolejny; } element;
typedef struct stos { element el; } stos;
void dodaj_na_stos( stos * st, char x ) { stos * pom; if( st == NULL ) { st =( stos * ) malloc( sizeof( stos ) ); st->el.symbol = x; st->el.kolejny = NULL; printf( "a " ); } else { pom = st; st =( stos * ) malloc( sizeof( stos ) ); st->el.symbol = x; st->el.kolejny = pom; printf( "b " ); } printf( "dodano %c\n", st->el.symbol ); }
stos * wsk = NULL;
dodaj_na_stos( wsk, '1' ); dodaj_na_stos( wsk, '2' ); dodaj_na_stos( wsk, '3' );
przy każdym wywołaniu funkcja dostaje wsk = NULL pomimo że wcześniejsze wywołanie powinno już coś tam wpisać :( z góry dziękuję za pomoc. |
|
Monika90 |
» 2013-10-08 16:24:07 Twoja funkcja modyfikuje kopię swojego argumentu. Przekazuj wskaźnik do wskaźnika. void dodaj_na_stos( stos **, char ); |
|
Katruf Temat założony przez niniejszego użytkownika |
» 2013-10-08 16:26:45 no tak tylko wtedy mam błąd przy st->el.symbol=x; (znaczy to jest pierwszy błąd) |
|
Monika90 |
» 2013-10-08 16:31:37 Musisz dodać gwiazdki w wielu miejscach void dodaj_na_stos( stos ** st, char x ) { if( * st == NULL ) { * st =( stos * ) malloc( sizeof( stos ) ); ( * st )->el.symbol = x; ( * st )->el.kolejny = NULL; printf( "a " );
|
|
pekfos |
» 2013-10-08 16:31:53 stos** to nie stos*. |
|
Monika90 |
» 2013-10-08 16:35:53 Ewentualnie można zwracać zmodyfikowany wskaźnik z funkcji. stos * wsk = NULL;
wsk = dodaj_na_stos( wsk, '1' ); wsk = dodaj_na_stos( wsk, '2' ); wsk = dodaj_na_stos( wsk, '3' );
To moim zdaniem jest lepsze, niż gwiazdki wszędzie. |
|
Katruf Temat założony przez niniejszego użytkownika |
» 2013-10-08 16:40:24 teraz się ładnie kompiluje ale po włączeniu po prostu wyskakuje systemowe okienko że program przestał działać :( a co do zwracania wskaźnika przez funkcję to tak faktycznie działa tylko problem pojawia się przy funkcji zdejmującej ze stosu :P bo ona musi zwrócić znak i stos po usunięciu zabranego elementu więc musi być z gwiazdkami. |
|
Monika90 |
» 2013-10-08 16:47:29 W jaki sposób wywołujesz dodaj_nas_stos? |
|
« 1 » 2 |