1. Strona główna
  2. Sylabus dla poziomu zaawansowanego – Techniczny analityk testowy (wersja z 19.10.2012)
  3. 3. Techniki analityczne
  4. 3.3 Analiza dynamiczna
  5. 3.3.3 Wykrywanie dzikich wskaźników

3.3.3 Wykrywanie dzikich wskaźników

W programie nie mogą w żadnym razie występować tzw. „dzikie” wskaźniki. Dzikim wskaźnikiem może być na przykład wskaźnik, który „utracił” swój obiekt lub funkcję docelową, bądź też wskaźnik, który odwołuje się do innego niż zamierzony obszaru pamięci (np. do obszaru znajdującego się poza przydzielonymi granicami tablicy). Użycie w programie dzikich wskaźników może mieć różne konsekwencje:

  • Program może działać zgodnie z oczekiwaniami. Sytuacja taka może mieć miejsce, jeśli dziki wskaźnik odwołuje się do pamięci, która nie jest obecnie używana przez program (przez co jest teoretycznie „wolna”) i/lub zawiera wartość niepowodującą problemów.
  • Program może ulec awarii. Dzieje się tak, jeśli dziki wskaźnik spowoduje nieprawidłowe użycie obszaru pamięci mającego krytyczne znaczenie dla działania programu (np. obszaru zastrzeżonego dla systemu operacyjnego).
  • Program może nie działać prawidłowo z powodu braku dostępu do wymaganych obiektów. W takiej sytuacji program może nadal funkcjonować, ale zostanie wyświetlony komunikat o błędzie.
  • Wskaźnik może uszkodzić dane znajdujące się w określonym obszarze pamięci, czego skutkiem jest użycie niepoprawnych wartości.

Należy przy tym pamiętać, że każda zmiana związana z użyciem pamięci przez program (np. nowa kompilacja po wprowadzeniu modyfikacji w oprogramowaniu) może pociągnąć za sobą każdy z wyżej wymienionych skutków.  Ma to szczególnie istotne znaczenie w sytuacji, w której program na początku działa zgodnie z oczekiwaniami pomimo użycia dzikich wskaźników, a następnie niespodziewanie ulega załamaniu (być może dopiero podczas eksploatacji) po wprowadzeniu zmiany. Warto również zwrócić uwagę na to, że tego rodzaju awarie są często symptomami występowania głębszych, ukrytych defektów (właśnie takich jak dzikie wskaźniki) (patrz [Kaner02], „Lesson 74”). Narzędzia ułatwiają identyfikowanie dzikich wskaźników używanych przez program niezależnie od tego, czy wskaźniki takie wpływają na jego działanie. Niektóre systemy operacyjne zawierają wbudowane funkcje umożliwiające wykrywanie naruszeń zasad dostępu do pamięci w czasie wykonywania. System operacyjny może na przykład zgłosić wyjątek, gdy aplikacja próbuje uzyskać dostęp do miejsca w pamięci znajdującego się poza obszarem dozwolonym dla tej aplikacji.