Nie, nie jest to
wina kompilatora. Gcc w wersji której używam skompilował kod ale oczywiście program się wysypuje - ponieważ prosisz się o wyciek pamięci .
Już pokazuję w czym rzecz:
Kod: Zaznacz cały
struct node{
int key;
struct node *left,*right;
} *korzen; \TUTAJ deklarujesz jedynie >wskaźnik< do struktury który
\nie wskazuje na żadną istniejącą strukturę.
korzen->key=10; \TUTAJ próbujesz przypisać liczbę,
\do składowej struktury na którą wskazuje wskaźnik o nazwie "korzen",
\ale ten wskaźnika nie wskazuje na żadną strukturę!
Proponuję w ogóle unikać tej składni, zgrabniej było by zrobić to w ten sposób:
Kod: Zaznacz cały
struct node{
int key;
struct node *left,*right;
};
node* korzen;
korzen=NULL;\TUTAJ wyraźnie widać że "korzen" na nic(jeszcze) nie wskazuje.
Potem oczywiście trzeba stworzyć strukturę i przypisać do wskaźnika np. tak:
I potem zwolnić zaalokowaną pamięć:
Jeśli piszesz w czystym C to oczywiście korzystasz zamiast new i delete z funkcji malloc i free(ale dla mnie to strasznie stare dzieje z czystym C ).