Ostatnio w zasadzie to nie był nawet wpis, to po prostu była krótka notka. Wszystko wtedy robiłem tylko po to, aby utrzymać ciągłość wpisów. Teraz krótki opis konsekwencji, kiedy to pisałem na siłę i nie miałem weny, ani motywacji do nanoszenia poprawek w projekcie.
SIVSEGV, czyli naruszenie ochrony pamięci
Ponieważ za rozwiązaniem problemu z tworzeniem okna z odpowiednią liczbą elementów odpowiadają wskaźniki. Wymagana jest szczególna ostrożność przy korzystaniu z nich, ponieważ błędy, które pojawiają się kilka dni, tygodni, miesięcy później, gdy tylko Twoja aplikacja rośnie z dnia na dzień w kolejne linie kodu i pliki nie jedną osobę doprowadziły do frustracji.
SIGSEGV, kiedy najszybciej się na to załapiesz?
W moim przypadku są to listy i stosy, kiedy nie pilnuję indeksowania (patrz-ostatni wpis na Facebook’u). Według Wikipedii
Zdarzenie wykrywane przez sprzęt, polegające na korzystaniu przez program z pamięci poza alokowanym dla niego obszarem.
Czasami jest to celowy zabieg, który możemy spotkać przy zasadzie działania „inteligentnych list”, czy chociażby vectora. Wtedy jednak zadaniem programu jest wychwycenie w odpowiednim momencie ryzyka przepełnienia zbyt małego stosu i zwiększenie jego rozmiaru, co zwiększa efektywność i wydajność. To właśnie dzięki takim strukturom, jak lista, czy wektor niejako (moim zdaniem) zwalniają nas trochę z myślenia o tym, żeby uwzględnić ryzyko związane z brakiem miejsca.
Jak trafiłem na ten błąd
Wynika on, tak jak w większości przypadków, o których miałem na wykładach i laboratoriach z obiektowego C z niepoprawnego lub nieostrożnego posługiwania się wskaźnikami. W tym wypadku wyniknął on jednak trochę z zaniedbania poprawnego zastosowania mechanizmu kodu referencyjnego (patrz klasa myQLabel). Podczas tworzenia w oknie kategorii tych elementów nie wymusiłem poprawnego indeksowania, numerowania „przycisków”. Stąd też każdy nowo utworzony przycisk „zbierał” to, co zostało w tym miejscu po przednich aplikacjach. Przykra sprawa, ale wynik tego, jak sobie radził program, po kompilacji możecie zobaczyć na Fun Page’u bloga.
Skorygowany błąd możecie podejrzeć oczywiście w repozytorium na githubie.
Co teraz?
W zasadzie pozostałe części nie wymagają na chwilę obecną doskonalenia kodu. Chcę teraz poświęcić trochę czasu na inne projekty, ponieważ czas mnie goni, a pomysły same się nie urzeczywistnią. Dodatkowo semestr IV przyniósł ze sobą nowe projekty w technologiach, za którymi albo nie przepadam, albo nie miałem jeszcze z nimi styczności. Wszystkie projekty muszę albo zamknąć przed końcem kwietnia, albo maja, albo czerwca, a marzec już praktycznie za mną. Dlatego też teraz będę musiał intensywnie szukać multimediów oraz zdjęć do projektu, by później przeprowadzić pomyślnie testy na znajomych, czy innych ochotnikach z Internetu.