Obsługa błędów segmentacji
Mam aplikację, której używam do przechwycenia błędu segmentacji lub ctrl-c. Korzystając z poniższego kodu, mogę przechwycić błąd segmentacji, ale procedura obsługi jest wywoływana ponownie i ponownie. Jak mogę ich powstrzymać. Dla twojej informacji nie chcę wychodzić z mojej aplikacji. Po prostu mogę zadbać o uwolnienie wszystkich uszkodzonych buforów.
Czy to możliwe?
<code>void SignalInit(void ) { struct sigaction sigIntHandler; sigIntHandler.sa_handler = mysighandler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0; sigaction(SIGINT, &sigIntHandler, NULL); sigaction(SIGSEGV, &sigIntHandler, NULL); } </code>
i handler idzie w ten sposób.
<code>void mysighandler() { MyfreeBuffers(); /*related to my applciation*/ } </code>
Tutaj dla sygnału błędu segmentacji, obsługa jest wywoływana wiele razy i jak oczywiste MyfreeBuffers () daje mi błędy w zwalnianiu już uwolnionej pamięci. Chcę tylko raz zwolnić, ale nadal nie chcę wychodzić z aplikacji.
Proszę pomóż.