Mam program, który implementuje kilka heurystycznych algorytmów wyszukiwania i kilka domen, zaprojektowanych do eksperymentalnej oceny różnych algorytmów. Program napisany jest w C++, zbudowany przy użyciu toolchaina GNU i uruchomiony w 64-bitowym systemie Ubuntu. Po uruchomieniu eksperymentów używam polecenia bash, aby ograniczyć ilość pamięci wirtualnej, której może użyć proces, aby mój system testowy nie zaczął się zamieniać.Dlaczego mój program czasami odskakuje, gdy brakuje pamięci, zamiast rzucać std :: bad_alloc?
Niektóre kombinacje algorytmów/instancji testowych trafiają w zdefiniowany przeze mnie limit pamięci. W większości przypadków program generuje wyjątek std :: bad_alloc, który jest drukowany przez domyślny program obsługi, w którym to momencie program się kończy. Czasami, zamiast tego, program po prostu się psuje.
Dlaczego mój program okazjonalnie wyskakuje, gdy brakuje pamięci, zamiast zgłaszać nieobsługiwane std :: bad_alloc i kończy działanie?
Błąd segfault może być spowodowany nie tylko dlatego, że osiągnął limit pamięci – Andrey
Jestem w pełni świadomy. W przypadkach, w których widziałem segfault, proces wykorzystywał ilość pamięci w pobliżu określonego przeze mnie limitu. Jestem przekonany, że wykryte błędy nie wynikały z błędów w moim kodzie. –
Czy rozważałeś prosty przebieg w GDB (Cóż, kilka z nich), aby zobaczyć, która część kodu seg-faults? – Shiroko