이중 포인터 문자열 입력 문제

thinga3의 이미지

지금 제가 작성하고 있는 매우 간단한 코드입니다.
여기에서 문제가 하나 있는데
mkconstant.c에서
sscanf부분에서 마지막 acc[j]를 넣어주면 컴파일은 되지만 자꾸 실행할시 segmentation fault가 뜹니다.
내가 어디 오타같은게 났나 하고 계속 찾아봤지만 보이지 않았습니다.

그러다가 sscanf부분에서
마지막 문자열 입력 부분을 제거해주니 그때는 segmentation fault가 나오지 않고 제대로 실행되었습니다.

sscanf(rbuf, "%s %s %f %f %d %s %s", net[j], sta[j], &lat, &lon, &dep, rec[j], acc[j])
이를
sscanf(rbuf, "%s %s %f %f %d %s", net[j], sta[j], &lat, &lon, &dep, rec[j])
이과 같이 바꿨을땐 제대로 실행이 되었습니다.
그래서 제가 생각할땐 마지막 문자열 받는 부분에 무슨 문제가 있는것 같은데
그걸 알지 못하겠고 해결할 방법을 찾지 못해 올립니다.

참고로, 제 운영체제는 osx이고, 파일은 첨부하였습니다.

File attachments: 
첨부파일 크기
파일 01.mkconstant.tar60 KB
raymundo의 이미지

OSX에서 해보았는데, sscanf 자체에는 별 문제가 없어보이고요. 발견하지 못한 문제가 더 있을수 있겠습니다만

    // sizeof(char *) 여야 하는데 sizeof(char)를 쓰는 바람에 메모리를 충분히 할당받지 못함
   sta = (char **)malloc(BUFSIZ*sizeof(char));
   net = (char **)malloc(BUFSIZ*sizeof(char));
   rec = (char **)malloc(BUFSIZ*sizeof(char));
   acc = (char **)malloc(BUFSIZ*sizeof(char));
 
   while( fgets(rbuf,BUFSIZ,rfp) ) i++;
// i가 초기화되어 있지 않기 때문에 실행 시점에 i에 0이 들어있는 운좋은 경우 외에는 정확히 잡지 못함
 
   for(j=0;j<i;j++ ) printf("%s %s %f %f %f %s %s\n", net[j], sta[j], lat, lon, dep, rec[j], acc[j]);
// dep가 int인데 %f 를 쓰는 바람에 가변인자 덩어리를 주어진 것보다 4바이트 더 읽으려 함

첫번째와 세번째가 서로 얽히면서 입력파일을 작게 하면 잘 되기도 하다가 입력파일이 커지면 printf 하면서 폴트가 나기도 하고 그러나보네요.

두번째 문제는 i값이 엄청나게 커지거나 음수가 되면서 무한히 읽고요.

좋은 하루 되세요!

thinga3의 이미지

감사합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.