Dziwny błąd związany z tworzeniem nowego wskaźnika do struktur

0

Więc, programuje w cpp dopiero 3 miesiace i wczesniej mialem raczej niewielka stycznosc z programowaniem (ucze sie sam).

Mam dosc dziwny problem, ktorego nie umiem rozwiklac.

Ponizszy kod wykonuje sie zupelnie bezblednie:

 
struct struktura
{
    int wartosc;
};

int main()
{
    struktura *przyklad;
    przyklad->wartosc = 50;
}

Jednakze, jakakolwiek proba utworzenia innego wskaznika typu struktura (tworzenie zwyklej struktury niebedacej wskaznikiem nie powoduje zadnych bledow). Jak np:

 
struct struktura
{
    int wartosc;
};

int main()
{
    struktura *przyklad;
    przyklad->wartosc = 50;
    struktura *przyklad2;
}

(Program oczywiscie sie elegancko kompiluje)

Powoduje wyskoczenie nastepujacego komunikatu w codeblocksie:

Process terminated with status -1073741510 (0 minutes, 4 seconds)

Dodam ze po malej zmianie:

    struktura *przyklad;
    struktura *przyklad2;
 

Czyli usuniecie linijki

 
    przyklad->wartosc = 50;

Powoduje, ze program zwraca 0, czyli wszystko sprawnie dziala.

Wszelkie proby 'ominiecia' tego dziwnego bledu( ktory spekuluje zwiazany jest z dostepem do pamieci) z uzyciem operatorow new i delete, nie pomagaja, jak i kilka innych prób ktor spelzly na niczym.

Moglby mi ktos wyjasnic czemu tak sie dzieje?

Dodam, ze jest mi to potrzebne gdyz obecnie ucze sie struktur danych, gdzie tego typu konstrukcje widze bardzo czesto i nie jestem w stanie sie bez tego obyć. A mam tutaj na mysli, stworzenie dwóch wskaźników typu strukturalnego w jednym programie.

0

Deklarujesz wskaźniki na obiekty ale nigdzie nie tworzysz tych obiektów -> wskaźniki pokazują na śmieci.

0

struktura *przyklad=new struktura;
przyklad->wartosc = 50;

1 użytkowników online, w tym zalogowanych: 0, gości: 1