쓰레드 생성후 스택오버플로우 발생 질문 드립니다.

ehaakdl의 이미지

윈도우 프로그래밍 하던중 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;
}
익명 사용자의 이미지

CMNICTHDR RecvBuff[SENDBUFF];
realloc(RecvBuff, sizeof(CMNICTHDR)*SENDBUFF);

정적으로 할당후에 동적재할당.....

p.s 디버깅 돌리면 나옵니다....

익명 사용자의 이미지

제가 생각하는게 정적으로 할당해놓고 부족하면 동적으로 할당해 주는 방식인대
이런 방식에 문제가 있다는 건가요?

ehaakdl의 이미지

감사합니다.