|
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 가 납니다.. -_-;;
:
: 좀 도와 주세요.. 쩝.. 벌써 일주일째... 답답하네요..
|