Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Wskaźnik na liczbę - zapętlenie programu

BartekWB 17 Sty 2014 19:32 879 4
  • #1 17 Sty 2014 19:32
    BartekWB
    Poziom 27  

    Rozważam taką sytuację:

    Pierwszy przypadek:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Drugi przypadek:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W pierwszym przypadku program działa prawidłowo, w drugim przypadku zapętla się, co prowadzi do zakończenia programu. Dlaczego brak zupełnie niezwiązanej zmiennej przed przypisaniem do wskaźnika prowadzi do zapętlenia programu? Dlaczego z tą zmienną program działa prawidłowo?

    0 4
  • #2 17 Sty 2014 19:44
    Dżyszla
    Poziom 42  

    Nie prowadzi do żadnego zapętlenia, a jedynie do błędu adresacji. I w pierwszym i w drugim przypadku przypisanie wartości pod adres, który w żaden sposób nie został przydzielony lub wskazany - jest błędne i może (ale nie musi) doprowadzać do wyjątku błędu dostępu do pamięci. Może równie dobrze dokonać nadpisania części programu lub jego danych. Dużo też będzie zależało od tego gdzie i w jakim trybie procesora dany kod zostanie uruchomiony.

    0
  • #3 17 Sty 2014 20:06
    BartekWB
    Poziom 27  

    Rozumiem, tak podejrzewałem, ale to, ze zadziałało mnie zbiło z tropu. Czyli dopiero taki zapis jest prawidłowy, bo wskazujemy na jakiś obiekt, który ma już swoje miejsce zarezerwowane w pamięci?

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #4 17 Sty 2014 20:55
    the_fifth_horseman
    Poziom 32  

    Dokładnie tak.

    0
  • Pomocny post
    #5 17 Sty 2014 21:38
    Dżyszla
    Poziom 42  

    Dopowiem jeszcze, że generalnie wszelkie błędy odwołań do pamięci (głównie wskaźniki i tablice dynamiczne) potrafią dawać zupełnie niezrozumiałe i nieoczekiwane rezultaty. Przykładowo błąd w jednym miejscu może powodować efekt w kodzie, który z pozoru zupełnie nie ma związku, a w pewnych przypadkach może wręcz dojść do podręcznikowego efektu motyla, gdzie jeden błąd (przykładowo po wprowadzeniu liczby 2 do jakiegoś swojego kalkulatora) spowoduje, że teksty w okienku zaczną wyświetlać się po chińsku ;)

    0