@madzieq - nie podałaś wersji Delphi; W starych wersjach (np. Delphi7) nie było czegoś takiego jak SIGSEGV
, tylko Access Violation
, więc musisz korzystać z jakiejś nowszej wersji;
Nie wiem jak w nowszych Delphi, ale FPC ma coś takiego jak External: SIGSEGV
i to jest wyjątek (a przynajmniej błąd ten jest traktowany jako wyjątek), więc można go obsługiwać blokiem Try Except; I o ile w trybie debugowania będzie problem ze wznowieniem pracy debugowanej aplikacji (szlag trafia debuger :]), to w trybie release problemu już nie będzie - wyjątek zostanie złapany i obsłużony prawidłowo, bez systemowego okienka z komunikatem;
@madzieq - Ty i tak korzystasz z "Pokemon Exception Handling", więc Twój kod można zapisać tak:
try
// linijka naruszająca pamięć
except
n := 0;
end;
Nie wiem po co to Break - to nie C++ (chyba że blok wyłapujący wyjątki masz wewnątrz ciała pętli); W każdym razie jeśli używasz FPC, to poza debugerem wszystko powinno działać jak należy (tzn. prawidłowo łapać wyjątek); Nie wiem jak zachowa się Delphi, ale także powinno łapać wyjątek, a przynajmniej w trybie release;
Co i tak nie zmienia faktu, że kod należy poprawić, bo na pewno jest błędny.