쓰레드 생성후 스택오버플로우 발생 질문 드립니다.
글쓴이: ehaakdl / 작성시간: 목, 2016/04/21 - 1:16오전
윈도우 프로그래밍 하던중 main함수에서 부모윈도우 생성후 쓰레드를 생성하자 마자 스택 오버플로우 오류가 발생 했습니다.
[main함수]
thRecv = CreateThread(NULL, 0, &RecvCommunicate, &hSock, 0, &thRecvId);//스택오버플로우 발생
[쓰레드 대상함수]
DWORD WINAPI RecvCommunicate(LPVOID hSock) { static int Recvcnt; CMNICTHDR RecvBuff[SENDBUFF]; memset(RecvBuff, 0, sizeof(CMNICTHDR)); int rRecv=0,EndPoint=SENDBUFF; while (1) { if (Recvcnt == EndPoint) { int AllocCheck = 0; for (int nCol = EndPoint - 1; nCol <= 0; nCol--) //수신버퍼가 커질수록 부하가 커진다 해결방안 찾아보기 { if (RecvBuff[nCol].Command == 0) { if (nCol + FREESPACE < EndPoint) { Recvcnt = nCol; AllocCheck = 1; break; } } } if (AllocCheck == 0) { realloc(RecvBuff, sizeof(CMNICTHDR)*SENDBUFF); EndPoint = SENDBUFF + Recvcnt; } } rRecv = recv(*(SOCKET*)hSock,(char*)&RecvBuff[Recvcnt],sizeof(CMNICTHDR),0); if (rRecv == -1) { int reRecv=0; while (reRecv < RERECVMAX) { rRecv = recv(*(SOCKET*)hSock, (char*)&RecvBuff[Recvcnt], sizeof(CMNICTHDR), 0); if (rRecv != -1) { break; } else if (rRecv == -1 && reRecv == 2) { return GetLastError(); } reRecv++; } } Recvcnt++; } return 0; }
Forums:


메모리 할당 에러
CMNICTHDR RecvBuff[SENDBUFF];
realloc(RecvBuff, sizeof(CMNICTHDR)*SENDBUFF);
정적으로 할당후에 동적재할당.....
p.s 디버깅 돌리면 나옵니다....
제가 생각하는게 정적으로 할당해놓고 부족하면..
제가 생각하는게 정적으로 할당해놓고 부족하면 동적으로 할당해 주는 방식인대
이런 방식에 문제가 있다는 건가요?
감사합니다. 제가 틀렷군요
감사합니다.