|
감사 합니다..
아까 GDB로 돌려 봤는데~~ 천천히 돌려 보는데
문제의 부분인
pos = (int *)malloc((index+1)*sizeof(int));
부분에서 segmentation fault는 나지 않더라구요~~
단지 너무 시간을 지체 해서 그런지 메시지 전달을 받지 못했지만.. -_-;
정말이지 전에는 됐었는데~~ -_-;
2주 지나서 점검하는데 나버려서 짜증 많이 났네요~ ㅎㅎ
RPC로 바꿀까 하는데 유용한 사이트 없을까요??
알려 주시면 감사하겠습니다. ^^;
신경써 주시고 같이 고민해 주셔서 감사합니다. (__)
유영인 Cuperido 님이 쓰신 글 :
: pos = (int *)malloc((index+1)*sizeof(int));
:
: 특별히 이 줄이 문제는 없어 보입니다.
: 다만, 다른 곳에서 메모리 엮임을 방지하기 위하여
: 버그를 수정해야 할 필요성이 있어 보입니다.
:
: 1. line 169
: free(rcvMsg); 이 생성 없이 소멸자만 존재
:
: 2. line 153 이 부분에서
: if( (remain-cnt) > SENDSIZE)
: {
: if( recv(sockFd, (msg+cnt), RCVSIZE, 0) < 0)
: errorMsg("msg recv() failed");
: }
: else
: {
: if( recv(sockFd, (msg+cnt), (remain-cnt), 0) < 0)
: errorMsg("msg recv() failed");
: break;
: }
: cnt += RCVSIZE;
:
: 일정 바이트가 되지 않으면 루프를 돌아 일정 바이트를 채우는 것 같은데
: 현재 사용하시는 TCP 통신의 경우 recv가 딱딱 떨어져서 오지는 않습니다.
:
: if( recv(sockFd, (msg+cnt), (remain-cnt), 0) < 0) 이 부분에서 return 되는 값은
: 실질적으로 넘겨받은 byte 값인데, cnt += RCVSIZE; 에서 이미 define 된 값을
: 증가시키고 있습니다.
:
: 이런 경우, TCP통신이 조금이라도 지체되어 다음 타이밍으로 버퍼가 넘어가 잘렸을 경우
: (즉, 한덩어리가 모두 오지 않은 경우) buffer overflow 에러를 발생합니다.
: (물론 눈에는 보이지 않고 다른 변수들의 영향을 미칩니다)
:
:
: 이외 다른 부분은 테스트할 여건이 되지 않아 :( 잘 모르겠네요.
: gdb 에서 한줄한줄 넘어가시면서 print 로 값의 변화를 알아보시는 것도 좋은
: 방법이라 생각됩니다.
:
:
: cuperido
:
:
: 황상준 님이 쓰신 글 :
: : 밑에서 물어봤던 건데요...
: :
: : 같은 함수를 두번 호출 하면 두번째 함수의 첫번째 malloc 부분에서
: :
: : segmentation fault 가 납니다.. -_-;;
: :
: : 좀 도와 주세요.. 쩝.. 벌써 일주일째... 답답하네요..
|