Niezidentyfikowany błąd (praca z klasami)
Napisane: środa, 21 lutego 2018, 20:50
Witam!
Wstępnie udało mi się stworzyć fajną aplikację pracującą na klasach. Niestety program nie działa stabilnie. Mam bardzo duży problem ze zidentyfikowaniem błędu ponieważ nie jest to błąd "ortograficzny", tzn. kompilator wszystko akceptuje. Nie widać tam błędów, kompilacja przebiega bez zastrzeżeń, mimo wszystko gdy wciskam główny przycisk "LOSUJ POSTAĆ", na przykład 15 razy to od czasu do czasu...ale nie zawsze aplikacja się zawiesza. Muszę zamykać proces ponieważ nic innego nie da się zrobić.
Program napisałem w RadStudioXE2, a także testowałem w CodeBlocks (po małym przerobieniu klas tak aby informacje zostały wysyłane do strumienia cout w konsoli.).
Ogólnie program działa bez zarzutu. Niestety tak jak napisałem wyżej raz na jakiś czas pojawia się poważny błąd. Próbowałem debugować w codeblocks-ie. Uruchamiałem tą apkę w debuggerze linijka po linijce i wydaje się wszystko wporządku. Wygląda to tak jakby raz na jakiś czas nie udało się zaalokować pamięci dla dynamicznie tworzonego obiektu klasy i już na samym początku zawiesza się program zanim wypełni pola klasy.
Tylko raz, może dwa razy na sto prób wyskoczył mi błąd "Access violation" więc być może problem dotyczy jakiegoś wskaźnika. Miejsc gdzie wskaźnikowo używam tablicy mam dosłownie kilka. Sprawdzałem je kilkukrotnie i wydaje mi się, że jest naprawdę wporządku.
Bardzo proszę o pomoc. Nie potrafię odnaleźć w którym miejscu tego mechanizmu pojawia się problem. Czuję, że jest to problem leżący wewnątrz jednej z klas, gdzie dynamicznie tworzę obiekt klasy pomocniczej aby pracować na jej danych. Przyglądałem również to miejsce 9348593845938 razy, szukałem odpowiedzi w książkach ale wydaje mi się, że jest zgodnie ze sztuką... Jestem zrozpaczony bo zrobiłem kupę roboty i nie potrafię dostrzec problemu...
Problem objawia się takim podpisem:
Nazwa zdarzenia problemu: AppHangB1
Nazwa aplikacji: Project1.exe
Wersja aplikacji: 1.0.0.0
Sygnatura czasowa aplikacji: 00000000
Podpis zawieszenia: 4184
Typ zawieszenia: 0
Wersja systemu operacyjnego: 6.1.7601.2.1.0.256.1
Identyfikator ustawień regionalnych: 1045
Dodatkowy podpis zawieszenia 1: 41844279fda6391953ab4353f4c7e646
Dodatkowy podpis zawieszenia 2: 4d82
Dodatkowy podpis zawieszenia 3: 4d82cb1fd888019a4afd54106269355e
Dodatkowy podpis zawieszenia 4: 4184
Dodatkowy podpis zawieszenia 5: 41844279fda6391953ab4353f4c7e646
Dodatkowy podpis zawieszenia 6: 4d82
Dodatkowy podpis zawieszenia 7: 4d82cb1fd888019a4afd54106269355e
Zdaję sobie sprawę, że niewiele to może mówić bo przeszukałem chyba cały internet i odpowiedzi nijak się mają do zaistniałej sytuacji.
Oczywiście nie liczę na to, że ktoś odnajdzie błąd za mnie. Poprostu mam za małe doświadczenie i brak mi zmysłu gdzie może leżeć przyczyna.
Może gdybym mógł z Waszą pomocą zrobić taki mały remanent relacji tych klas oraz tak z grubsza co one robią, któryś Was wpadłby na jakiś konkretny pomysł.
Byłbym bardzo wdzięczny!
/edit program, który tworzę nie służy do celów komercyjnych jest projektem tworzonym w celu podszkolenia się w pracy z klasami, a tematyka jest związana z moją drugą pasją
Proszę napiszcie czy mogę liczyć na pomoc, to dalej rozwinę temat odnośnie klas.
Pozdrawiam.
Wstępnie udało mi się stworzyć fajną aplikację pracującą na klasach. Niestety program nie działa stabilnie. Mam bardzo duży problem ze zidentyfikowaniem błędu ponieważ nie jest to błąd "ortograficzny", tzn. kompilator wszystko akceptuje. Nie widać tam błędów, kompilacja przebiega bez zastrzeżeń, mimo wszystko gdy wciskam główny przycisk "LOSUJ POSTAĆ", na przykład 15 razy to od czasu do czasu...ale nie zawsze aplikacja się zawiesza. Muszę zamykać proces ponieważ nic innego nie da się zrobić.
Program napisałem w RadStudioXE2, a także testowałem w CodeBlocks (po małym przerobieniu klas tak aby informacje zostały wysyłane do strumienia cout w konsoli.).
Ogólnie program działa bez zarzutu. Niestety tak jak napisałem wyżej raz na jakiś czas pojawia się poważny błąd. Próbowałem debugować w codeblocks-ie. Uruchamiałem tą apkę w debuggerze linijka po linijce i wydaje się wszystko wporządku. Wygląda to tak jakby raz na jakiś czas nie udało się zaalokować pamięci dla dynamicznie tworzonego obiektu klasy i już na samym początku zawiesza się program zanim wypełni pola klasy.
Tylko raz, może dwa razy na sto prób wyskoczył mi błąd "Access violation" więc być może problem dotyczy jakiegoś wskaźnika. Miejsc gdzie wskaźnikowo używam tablicy mam dosłownie kilka. Sprawdzałem je kilkukrotnie i wydaje mi się, że jest naprawdę wporządku.
Bardzo proszę o pomoc. Nie potrafię odnaleźć w którym miejscu tego mechanizmu pojawia się problem. Czuję, że jest to problem leżący wewnątrz jednej z klas, gdzie dynamicznie tworzę obiekt klasy pomocniczej aby pracować na jej danych. Przyglądałem również to miejsce 9348593845938 razy, szukałem odpowiedzi w książkach ale wydaje mi się, że jest zgodnie ze sztuką... Jestem zrozpaczony bo zrobiłem kupę roboty i nie potrafię dostrzec problemu...
Problem objawia się takim podpisem:
Nazwa zdarzenia problemu: AppHangB1
Nazwa aplikacji: Project1.exe
Wersja aplikacji: 1.0.0.0
Sygnatura czasowa aplikacji: 00000000
Podpis zawieszenia: 4184
Typ zawieszenia: 0
Wersja systemu operacyjnego: 6.1.7601.2.1.0.256.1
Identyfikator ustawień regionalnych: 1045
Dodatkowy podpis zawieszenia 1: 41844279fda6391953ab4353f4c7e646
Dodatkowy podpis zawieszenia 2: 4d82
Dodatkowy podpis zawieszenia 3: 4d82cb1fd888019a4afd54106269355e
Dodatkowy podpis zawieszenia 4: 4184
Dodatkowy podpis zawieszenia 5: 41844279fda6391953ab4353f4c7e646
Dodatkowy podpis zawieszenia 6: 4d82
Dodatkowy podpis zawieszenia 7: 4d82cb1fd888019a4afd54106269355e
Zdaję sobie sprawę, że niewiele to może mówić bo przeszukałem chyba cały internet i odpowiedzi nijak się mają do zaistniałej sytuacji.
Oczywiście nie liczę na to, że ktoś odnajdzie błąd za mnie. Poprostu mam za małe doświadczenie i brak mi zmysłu gdzie może leżeć przyczyna.
Może gdybym mógł z Waszą pomocą zrobić taki mały remanent relacji tych klas oraz tak z grubsza co one robią, któryś Was wpadłby na jakiś konkretny pomysł.
Byłbym bardzo wdzięczny!
/edit program, który tworzę nie służy do celów komercyjnych jest projektem tworzonym w celu podszkolenia się w pracy z klasami, a tematyka jest związana z moją drugą pasją
Proszę napiszcie czy mogę liczyć na pomoc, to dalej rozwinę temat odnośnie klas.
Pozdrawiam.