[C++] Segmentation Fault를 예외처리할수 있나요?
글쓴이: kuaaan / 작성시간: 금, 2005/12/09 - 12:53오후
Segmentation Fault가 떴을때 최소한 어디서 떴다 정도라도 기록하게 하고 싶습니다.
Segmentation Fault를 try ~ catch나 기타 적당한 방법으로 핸들링할수 있는지 궁금합니다.
#include <stdlib.h> #include <stdio.h> int main() { try { printf("test : %d\n", atoi(NULL)); } catch( ... ) { printf("Fault!!!\n");\ } } [root@fedora a]# ./a.out 세그멘테이션 오류 [root@fedora a]#
안되네요... ^^;;;
Forums:
Re: [C++] Segmentation Fault를 예외처리할수 있나요?
memory access violation의 경우 VC++에서는 위와 같
memory access violation의 경우 VC++에서는 위와 같은 방식의 exception 처리가 가능하지만 UN*X 계열의 경우에는 catch가 되지 않는 것으로 기억하고 있습니다.
구지 하시려면 signal () 함수 쪽을 이용해야 하지 않을까 생각됩니다.
좀 까다로운 부분인데, 간단히 말해서, C++에서 signal handl
좀 까다로운 부분인데, 간단히 말해서, C++에서 signal handler로 쓸 수 있는 함수는, C 언어의 기능만을 써서 구현된 함수(POF, Plain Old function)이어야 합니다.
어디까지 C 언어의 기능을 쓸 수 있는냐? 이건 또 다른 문제입니다. 전웅님과 같은 분이 대답해 주시길 바랍니다. ISO C++ 표준이 1998에 제정된 것을 보면, C99 이전의 표준을 기준으로 한 것 같습니다.
안전하게 하려면.. for (int i = 0; ...) 등과 같은 식도 써서는 안되고, C 언어에 없는 C++ 기능, 예를 들어 throw/catch 등을 쓸 수도 없습니다.
물론 잘 알려진 것처럼 _Exit(), abort()를 제외한 나머지 표준 함수들도 쓸 수 없습니다.
결국 C++ exception으로 만들기는, 표준에 따르면 불가능하고, 실제 구현할 수 있느냐도 불투명합니다. C++ and Signal Handling도 참고하기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기