메모리 할당시에 세그먼트 폴트 ㅠ.ㅠ

익명 사용자의 이미지

malloc()이나 strdup()같은..
메모리 할당을 하여 처리하는 함수에서 세그먼트 폴트가 됩니다.

즉 malloc()이나 strdup()가 실패해서가 아니라..
메모리 할당하면서 세그먼트 폴트가 나네요..

2일 이상 끙끙알아 같고 알아낸 원인이 이겁니다 ㅠ.ㅠ
그런데 왜 이런 증상이 나는지 모르겠네여./.

코어라도 나면 잡겠는데.. 코어도 안남고...
그렇다고 메모리 부족으로 생기는것두 아니구여..

이런 증상이 나는 원인이나 해결책을 아시는분은 답변좀 해주시기 바랍니
다.
저 미치기 지금 일보직전이예염 ㅠ.ㅠ

익명 사용자의 이미지

....

익명 사용자의 이미지

fprintf(stderr,"Check #3\r\n");
get_userinfo_by_request(request, &userdata);
fprintf(stderr,"Check #4\r\n");
con->userid = strdup(userdata.userid);
fprintf(stderr, "%s - %p\r\n", con->userid, con->userid);
con->name = (char *)malloc(20+1);
memset(con->name, '\0', 20+1);
sprintf(con->name, "%s", userdata.name);
// con->name = strdup(userdata.name);
fprintf(stderr, "%s - %p - %s\r\n", con->name, con->name,
userdata.regio
n);
// con->region = (char *)malloc(8+1); <== 바꿔서 하면 여기서 죽
구요
// memset(con->region, '\0', 8+1);
// sprintf(con->region, "%s", userdata.region);
con->region = strdup(userdata.region); <== 지금은 여기서 죽습
니다.

참고로 처음 접속후 커맨드 실행시에는 정상적이나...
두명이 접속후 processing을 좀 한후..
두개다 종료하고 다시 접속할시에 여기서 퍽 죽어버리네여 ㅠ.ㅠ

아 괴롭다 정말 ㅠ.ㅠ

익명 사용자의 이미지

그럴경우 거의 100% 쏘쓰 코드 어딘가에, 메모리 할당을 잘못한 부분이
있기 때문에 생깁니다.
이는 메모리할당을 하는 해당 변수뿐만 아니라, 전혀 관계가 없어 보이는
다른 부분에서의 메모리 할당때문에, 에러가 발생할수도 있습니다.
분명히 해당 변수에 대해서 메모리 할당을 제대로 한것같은데도
에러가 발생한다면, 쏘쓰 어딘가에서 메모리를 잘못사용한곳이 있을겁니다.
루프를 돌린다면 특히 조심해야하죠..
쏘쓰코드 천천히 살펴보시고, gdb 같은 디버깅도구를 사용하셔서 에러를
잡으심이 좋을듯 싶습니다.

익명 사용자의 이미지

저도 처음에는 그렇게 생각했는데여..

그렇다면 처음 접속자와 두번째 접속자가 사용할땐 괜찬다가..
이 두 접속자가 종료후에 다시 접속시에 이런 문제점이 발생하냐는거지
요..
또 한명만 접속했다가 돌아가는건 또 괜찬더군요 ㅠ.ㅠ
정말 미치겠습니다...

익명 사용자의 이미지

c++에서는 끝문자를 "\0"를 사용합니까?
그냥 "0"안씁니까?

sprintf대신에 snprintf를 쓰심이 좋을듯.

잘모르지만...

익명 사용자의 이미지

우선 userdata를 정의하는 구조체를 훑어본 다음에 .name 과 .region 이
포인터인지 어레이인지 ... ('어레이'라면 혹 덮어쓰기 했을 수도 있고,
이런 경우는 거의 없을테지만 NULL 로 할당 될 수도 있습니다...)

그리고 가장 중요한건 .name ,.region 이 '\0'로 끝나는지 확인 하시면
될 겁니다... (이건 format string '%s'가 '\0'을 원하기 때문이죠.
C 에서 자주 발생하는 버그죠...)

그런데 제생각에는 DB쪽에 문제가 있는 것 같군요...

댓글 달기

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