세크멘테이션 결함...의 압박
글쓴이: 문동국 / 작성시간: 토, 2003/12/27 - 11:32오전
RedHat Linux에서 file i/o 의 프로그램을 만들었습니다.
컴파일두 잘되구... 실행두 잘 되었습니다...
다른 곳에 가서 이제 이 소스를 컴파일(cc 로 함)하러가서....
다른 곳의 os는 Solaris인데 거기서 문제가 발생한 겁니다.
컴파일시 Warnning 이 뜨기는 한데...실행파일두 만들어지고..
그 후 실행파일을 실행하면
세그멘테이션 결함으로
(Memory Dump)되었다는 오류가 발생하면서 프로그램이 죽어버립니다.
다시 회사로 돌아와서 회사 솔라리스에서 컴파일을 해보았는데...
잘되구요... 이런 어이없는...도데체 멀 잘못했길래...
이런 세그멘테이션 오류는 어떤 오류인지... 일반적으로 어떨때 생기는지
답변 부탁드립니다...
아 그리고 소스 첨부파일로 올리겠습니다.
File attachments:
첨부 | 파일 크기 |
---|---|
upload.c | 5.59 KB |
Forums:
[code:1]cc -Wall -o upload upload.c [/co
cc -Wall -o upload upload.c
해 보시길. 지금 제가 있는 곳은 테스트할 상황이 아니라서...
세벌 https://sebuls.blogspot.kr/
-Wall의 이 옵션은 멀 의미하는 것이죠?
-Wall의 이 옵션은 멀 의미하는 것이죠?
컴파일할 때 -Wall 옵션을 주면 모든 경고 메세지를 출력합니다.
컴파일할 때 -Wall 옵션을 주면 모든 경고 메세지를 출력합니다.
소스를 확인해 보니
getlogtime() 함수에서
fread() 호출하는 부분이 좀 의심이 가는것 같네요.
시간 관련 코드가 세그멘테이션 결함을 발생시킬 수 있다는 건... 어
시간 관련 코드가 세그멘테이션 결함을 발생시킬 수
있다는 건... 어떤 점에서 그런 오류가 발생한다는건지..
저번에 포럼에서... 얼핏 봤을땐
printf("%s\n" , ctime(the_time)) 이러한 코드가
오류를 발생할 가능성이 있다고는 하던데...
자세한 답변 부탁드립니다.
일반적으로 세그멘테이션 오류는...
접근 불가능한 메모리 영역을 프로그램 코드에서 접근을 시도했을때 발생합니다. 대개 세그멘테이션 오류가 났다면 이런 경우입니다.
다른 솔라리스환경에서는 잘 컴파일 되었다면 컴파일러가 의심됩니다.
컴파일러 버젼을 바꾸어서 테스트 해 보세여.
autography
인간에게는 자신의 운명을 거부할 권리가 있다.
흠... 그러면 cc와 gcc 컴파일러의 큰 차이가 있는것입니까? 사
흠... 그러면 cc와 gcc 컴파일러의 큰 차이가 있는것입니까?
사실 거기서는 cc로 컴파일을 하고 회사와서는 cc가 없길래 gcc로 컴파일을 했는데...
[quote="문동국"]흠... 그러면 cc와 gcc 컴파일러의 큰 차이
있습니다
원래 cc는 os제조사에서 재공하는 컴파일어입니다'
솔라리스람ㅕㄴ SUN에서 재공하는 컴파일러입ㅇ니ㅏ
즐린
[quote="문동국"]시간 관련 코드가 세그멘테이션 결함을 발생시킬 수
그때의 결론은 문제없다~ 였답니다. ;)
My Passion for the Vision!
아... 이런 경우도 있었습니다.
같은 솔라리스 환경이라도 하드웨어 스펙이 틀리다면 위와 같은 문제가 발생할 수 있습니다.
저도 상황은 다르지만 같은 문제로 어려움을 겪다가 학부 프로젝트 하나를 망친적이 있죠.
저같은 경우에는 pc환경에서 리눅스로 작업을 한것이 집에서는 잘 작동을 했으나... 임베디드 환경에 이식하는 과정에서 문제가 생겼습니다.
이유는 임베디드 환경의 프로세서가 32비트 주소를 지원하지 않아서 생긴 문제로 추정이 되더군요.
님께서도 이런 문제도 함 고려해 보시는게 좋겠습니다.
autography
인간에게는 자신의 운명을 거부할 권리가 있다.
막연하게 segment fault가 왜 났을까. 하고 생각하는 것보다는
막연하게 segment fault가 왜 났을까. 하고 생각하는 것보다는 직접 debugger를 돌려보심이 어떨까요? segmentation fault를 일으킨 시스템에서 어떨 때 segfault가 나는지 그 발생 시점을 알아내신 다음 debugger를 돌려보면 고민하실 필요가 없을 것 같네요.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
문제는 컴파일러였습니다.
문제는 컴파일러였습니다.
방화벽에 막혀서 오늘에 와서야 테스트를
할 수 있었습니다.
gcc로 하니 에러 없이 잘되네요
댓글 달기