Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] przekazywanie wskaźników do funkcji

Ostatnio zmodyfikowano 2013-10-08 16:49
Autor Wiadomość
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

C/C++
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 );
}
C/C++
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.
P-93355
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 );

P-93356
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)
P-93358
Monika90
» 2013-10-08 16:31:37
Musisz dodać gwiazdki w wielu miejscach
C/C++
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 " );
P-93359
pekfos
» 2013-10-08 16:31:53
stos** to nie stos*.
P-93360
Monika90
» 2013-10-08 16:35:53
Ewentualnie można zwracać zmodyfikowany wskaźnik z funkcji.
C/C++
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.
P-93361
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.
P-93362
Monika90
» 2013-10-08 16:47:29
W jaki sposób wywołujesz dodaj_nas_stos?
P-93363
« 1 » 2
  Strona 1 z 2 Następna strona