세크멘테이션 결함...의 압박

문동국의 이미지

RedHat Linux에서 file i/o 의 프로그램을 만들었습니다.
컴파일두 잘되구... 실행두 잘 되었습니다...

다른 곳에 가서 이제 이 소스를 컴파일(cc 로 함)하러가서....
다른 곳의 os는 Solaris인데 거기서 문제가 발생한 겁니다.
컴파일시 Warnning 이 뜨기는 한데...실행파일두 만들어지고..
그 후 실행파일을 실행하면

세그멘테이션 결함으로
(Memory Dump)되었다는 오류가 발생하면서 프로그램이 죽어버립니다.

다시 회사로 돌아와서 회사 솔라리스에서 컴파일을 해보았는데...
잘되구요... 이런 어이없는...도데체 멀 잘못했길래...

이런 세그멘테이션 오류는 어떤 오류인지... 일반적으로 어떨때 생기는지
답변 부탁드립니다...
아 그리고 소스 첨부파일로 올리겠습니다.

File attachments: 
첨부파일 크기
파일 upload.c5.59 KB
세벌의 이미지

cc -Wall -o upload upload.c

해 보시길. 지금 제가 있는 곳은 테스트할 상황이 아니라서...

문동국의 이미지

-Wall의 이 옵션은 멀 의미하는 것이죠?

osmosm의 이미지

컴파일할 때 -Wall 옵션을 주면 모든 경고 메세지를 출력합니다.

소스를 확인해 보니
getlogtime() 함수에서
fread() 호출하는 부분이 좀 의심이 가는것 같네요.

문동국의 이미지

시간 관련 코드가 세그멘테이션 결함을 발생시킬 수
있다는 건... 어떤 점에서 그런 오류가 발생한다는건지..

저번에 포럼에서... 얼핏 봤을땐
printf("%s\n" , ctime(the_time)) 이러한 코드가
오류를 발생할 가능성이 있다고는 하던데...

자세한 답변 부탁드립니다.

앙마의 이미지

접근 불가능한 메모리 영역을 프로그램 코드에서 접근을 시도했을때 발생합니다. 대개 세그멘테이션 오류가 났다면 이런 경우입니다.
다른 솔라리스환경에서는 잘 컴파일 되었다면 컴파일러가 의심됩니다.
컴파일러 버젼을 바꾸어서 테스트 해 보세여.

autography

인간에게는 자신의 운명을 거부할 권리가 있다.

문동국의 이미지

흠... 그러면 cc와 gcc 컴파일러의 큰 차이가 있는것입니까?
사실 거기서는 cc로 컴파일을 하고 회사와서는 cc가 없길래 gcc로 컴파일을 했는데...

hys545의 이미지

문동국 wrote:
흠... 그러면 cc와 gcc 컴파일러의 큰 차이가 있는것입니까?
사실 거기서는 cc로 컴파일을 하고 회사와서는 cc가 없길래 gcc로 컴파일을 했는데...

있습니다
원래 cc는 os제조사에서 재공하는 컴파일어입니다'
솔라리스람ㅕㄴ SUN에서 재공하는 컴파일러입ㅇ니ㅏ

즐린

Viz의 이미지

문동국 wrote:
시간 관련 코드가 세그멘테이션 결함을 발생시킬 수
있다는 건... 어떤 점에서 그런 오류가 발생한다는건지..

저번에 포럼에서... 얼핏 봤을땐
printf("%s\n" , ctime(the_time)) 이러한 코드가
오류를 발생할 가능성이 있다고는 하던데...

자세한 답변 부탁드립니다.

그때의 결론은 문제없다~ 였답니다. ;)

My Passion for the Vision!

앙마의 이미지

같은 솔라리스 환경이라도 하드웨어 스펙이 틀리다면 위와 같은 문제가 발생할 수 있습니다.
저도 상황은 다르지만 같은 문제로 어려움을 겪다가 학부 프로젝트 하나를 망친적이 있죠.
저같은 경우에는 pc환경에서 리눅스로 작업을 한것이 집에서는 잘 작동을 했으나... 임베디드 환경에 이식하는 과정에서 문제가 생겼습니다.
이유는 임베디드 환경의 프로세서가 32비트 주소를 지원하지 않아서 생긴 문제로 추정이 되더군요.
님께서도 이런 문제도 함 고려해 보시는게 좋겠습니다.

autography

인간에게는 자신의 운명을 거부할 권리가 있다.

cinsk의 이미지

막연하게 segment fault가 왜 났을까. 하고 생각하는 것보다는 직접 debugger를 돌려보심이 어떨까요? segmentation fault를 일으킨 시스템에서 어떨 때 segfault가 나는지 그 발생 시점을 알아내신 다음 debugger를 돌려보면 고민하실 필요가 없을 것 같네요.

문동국의 이미지

문제는 컴파일러였습니다.
방화벽에 막혀서 오늘에 와서야 테스트를
할 수 있었습니다.

gcc로 하니 에러 없이 잘되네요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.