(출처: http://hosang.tistory.com/180)
Segmentation fault 가 발생하는 경우는 원인을 찾기 어려운 경우가 종종 있으므로 여러가지 경우를 정리해보자.
1. File open 시 실제 파일이 없는 데 계속 진행하는 경우
-> 그러므로 반드시 FILE pointer 사용시는 파일이 올바르게 열렸는지 여부를 체크해야 한다.
2. Array out of bound index
-> Java 에서야 명확하게 array out of bound index 라는 메시지가 나오지만, C/C++의 경우 index bound 를 넘어서도 가능하면 접근해보고자 하기 때문에 segmentation fault 가 발생했다가, 안했다가 할 수 있다.
3. Function prototyping 문제
-> 가끔보면 실제 segmentation fault 와는 정말로! 전혀 상관없는 코드인데, 그 코드를 어떻게 수정하느냐에 따라 segmentation fault 가 발생했다가, 하지 않았다가 하는 경우가 있다. 이런 경우는 segmentation fault 와 관련된 함수 등의 prototype 이 명확히 정의되어 include 되어있는지 확인하자. 예를 function.c 파일에 함수를 잘 정의해 놓고, function.h 에는 prototype을 정의해 두지 않은 상태에서 실제 segmentation fault 가 발생하는 소스파일에서 function.h 를 include 하지는 않았는지 확인해보자. 이런 경우 함수는 실행하지만 함수의 return value 의 data type 이 잘못인식되어 array index 를 잘못 참조하는 경우가 발생할 수 있다.
4. Compiler Optimization 문제
-> Compiler 의 optimization 값이 너무 높은 레벨로 설정 되어있을 경우 segmentation fault 또는 core dump 가 발생할 수 있다. 혹시 compiler optimization 값이 -O3 로 되어있다면 -O2 로 레벨을 낮추고 이래도 문제가 해결 되지 않을 경우 -O0 로 설정한 뒤 테스트 해보길 바란다.
1. File open 시 실제 파일이 없는 데 계속 진행하는 경우
-> 그러므로 반드시 FILE pointer 사용시는 파일이 올바르게 열렸는지 여부를 체크해야 한다.
ex)
#include <assert.h>
pfReference = fopen(pcInputFileName, "r"); // Open an input file
pfConvertReference = fopen(pcOutputFileName, "w"); // Open an output file
assert(pfReference && pfConvertReference); // Validate input and output file
#include <assert.h>
pfReference = fopen(pcInputFileName, "r"); // Open an input file
pfConvertReference = fopen(pcOutputFileName, "w"); // Open an output file
assert(pfReference && pfConvertReference); // Validate input and output file
2. Array out of bound index
-> Java 에서야 명확하게 array out of bound index 라는 메시지가 나오지만, C/C++의 경우 index bound 를 넘어서도 가능하면 접근해보고자 하기 때문에 segmentation fault 가 발생했다가, 안했다가 할 수 있다.
3. Function prototyping 문제
-> 가끔보면 실제 segmentation fault 와는 정말로! 전혀 상관없는 코드인데, 그 코드를 어떻게 수정하느냐에 따라 segmentation fault 가 발생했다가, 하지 않았다가 하는 경우가 있다. 이런 경우는 segmentation fault 와 관련된 함수 등의 prototype 이 명확히 정의되어 include 되어있는지 확인하자. 예를 function.c 파일에 함수를 잘 정의해 놓고, function.h 에는 prototype을 정의해 두지 않은 상태에서 실제 segmentation fault 가 발생하는 소스파일에서 function.h 를 include 하지는 않았는지 확인해보자. 이런 경우 함수는 실행하지만 함수의 return value 의 data type 이 잘못인식되어 array index 를 잘못 참조하는 경우가 발생할 수 있다.
4. Compiler Optimization 문제
-> Compiler 의 optimization 값이 너무 높은 레벨로 설정 되어있을 경우 segmentation fault 또는 core dump 가 발생할 수 있다. 혹시 compiler optimization 값이 -O3 로 되어있다면 -O2 로 레벨을 낮추고 이래도 문제가 해결 되지 않을 경우 -O0 로 설정한 뒤 테스트 해보길 바란다.
'개발 > 프로그래밍(일반)' 카테고리의 다른 글
[스크랩] GDI 개체 누수로 인한 문제를 지연할 수 있는 Registry key (0) | 2012.06.13 |
---|---|
[스크랩] Eclipse 3.7 (Indigo) for C/C++ Programming (0) | 2012.05.08 |
Linux 오디오 프로그래밍 (0) | 2011.10.26 |
[스크랩] MFC에 대한 유용한 팁 모음 (0) | 2010.02.05 |
[MFC] Setting the width of the dropdown list (0) | 2010.02.02 |