C로 CGI프로그래밍 하다가 정말 이해가 안가는...

line7979의 이미지

도대체 오류가 어딘지 모르겠습니다... 지금 3일째 세그먼트폴트

가 어디서 왜 나는지 도져히 찿기가 어려워 도움을 요청합니다

ㅠ.ㅠ 첨부파일에 소스 있습니다..

File attachments: 
첨부파일 크기
Package icon input_student_data.zip16.23 KB
익명 사용자의 이미지

gcc 에서 -g 옵션 주시고 컴팔 하신다음에

gdb로 열어서 r 눌러보세요 --;

더 자세히 알고 싶으시면 gdb매녈 보시구요.

crimsoncream의 이미지

소스가 컴파일이 안되는 군요.
우선 getenv는 NULL return이 가능한 함수이므로 strcmp나 atoi에서 문제가 발생할 수 있고요.
그리고

char *
Fmake_word (FILE * stream, char splitter, int *cl)                                                                          
{
  char *dest;
  char ch;
  int i;
  ...
      if (i % 128 == 0)
        dest = (char *) realloc (dest, sizeof (char) * (i + 1));                                                                                                                                                                                        
  ... 
  return dest;                                                                                                              
}
이 함수에서 (i + 1)이 아니고 (i + 128)을 하려했던거 아닌가요?

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

line7979의 이미지

crimsoncream wrote:

우선 getenv는 NULL return이 가능한 함수이므로 strcmp나 atoi에서 문제가 발생할 수 있고요.

음... 저두 저부분이 의심이 가고 있었는데...

그럼 보통 printf() 함수를 이용하여 환경변수 찍을때

출력결과가 (null) 이렇게 나오는 이 부분에 의하여 문제가

발생하는 건가요?

그리고 (null) <== 이건 보통쓰이는 문자열은 아닐꺼 같은데..

정말 답답하네요 ㅠ.ㅠ

종종 자신을 돌아보아요!~

하루 1% 릴리즈~~

line7979의 이미지

crimsoncream wrote:

char *
Fmake_word (FILE * stream, char splitter, int *cl)                                                                          
{
  char *dest;
  char ch;
  int i;
  ...
      if (i % 128 == 0)
        dest = (char *) realloc (dest, sizeof (char) * (i + 1));                                                                                                                                                                                        
  ... 
  return dest;                                                                                                              
}

허거걱 루프초기값만 생각하고 저렇게 해놓고 삽질도 했었네요

:shock:

종종 자신을 돌아보아요!~

하루 1% 릴리즈~~

lifthrasiir의 이미지

crimsoncream wrote:
우선 getenv는 NULL return이 가능한 함수이므로 strcmp나 atoi에서 문제가 발생할 수 있고요.

음 뭐 사족이긴 한데... CGI에서 사용하는 REQUEST_METHOD 같은 환경 변수는 항상 설정되어 있어야 합니다. (QUERY_STRING의 경우 빈 문자열이라도... 물론 스펙 보시면 어떤 게 설정 안 될 수 있는 지 다 나와 있습니다. CONTENT_LENGTH 같은 경우 POST method 같은 경우에만 꼭 설정되어 있어야 하는 걸로 되어 있습니다. 등등등.)

- 토끼군

line7979의 이미지

아~~ 그렇군요... 감사합니다

종종 자신을 돌아보아요!~

하루 1% 릴리즈~~

댓글 달기

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