// bezpiecznie

char* wskChar = &d; c = *(long double*)wskChar; // niebezpieczne

Jest to spowodowane tym, że rozmiar zmiennej typu char wynosi 1 bajt (jest to pewne uproszczenie, ale dla potrzeb przykładu wystarczy), podczas gdy zmiennej typu long double wynosi 8 bajtów. W momencie dereferencji zrzutowanego wskaźnika, wskazującego na wartość jedno bajtową, nastąpi próba odczytania wartości long double, czyli 8 bajtów, które znajdują się być może w obszarze pamięci, który nie został przydzielony programowi przez system operacyjny. Podobna sytuacja ma miejsce podczas rzutowania w dół.

Rzutowanie w dół Przykład w języku C++: class Bazowa { public: int x;

class Pochodna : public Bazowa { public: int y;

void fun1( Bazowa& obiekt ) { obiekt.x = 5; }

void fun2( Pochodna& obiekt ) { obiekt.y = 5; }

int main() { Bazowa obiektBazowy; // deklaracja obiektu klasy Bazowa Pochodna obiektPochodny; // deklaracja obiektu klasy Pochodna Bazowa* wskBazowa = &obiektBazowy; Pochodna* wskPochodna = &obiektPochodny; fun1( obiektPochodny ); // ok fun1( *wskPochodna ); // ok fun2( *((Pochodna*)wskBazowa) );