new Command 하는데 오류가 납니다;;;
struct Command
{
WORD protocol;
int nSize;
};
DWORD WINAPI CClient_ServiceDlg::Receive_Msg (LPVOID data)
{
// 중략 //
Command* p_OK;
Command* p_OK1;
Command* p_Command;
Snd_Data* p_Data;
Snd_Position* p_Robot_Point;
pp_class = p_class;
while( TRUE )
{
transfer = recv( p_class->Get_Socket() , message , DataSize+6 , 0 );
if( transfer 이하 0 ) break;
p_RPacket.Copy_Msg(message,transfer);
p_RPacket.Dispatch_Msg( &p_Msg , &len );
protocol = (PTCL)(*(WORD*)p_Msg);
switch( protocol )
{
// 중략 //
////
case SER_USER_SND_SHORTROAD:
printData( "SHORTROAD" );
p_Data = (Snd_Data*)p_Msg;
p_MapPoint = new MAPPOINT[p_Data->nSize];
memcpy( p_MapPoint, p_Data->p_Data, sizeof(CROSSPOINT)*(p_Data->nSize) );
cnt_ShortRoad = p_Data->nSize;
//
p_OK=new Command; // 여기서 계속 오류가 납니다.
//
p_OK->protocol=USER_SER_REC_OK;
p_SPacket.Push_Msg(p_OK,sizeof(Command));
send( p_class->Get_Socket(),p_SPacket.Get_Packet(),p_SPacket.Get_Tail(),0);
p_SPacket.Shift_Msg(sizeof(Command)+2); //Send Packet 쉬프트
delete p_OK;
PrintPosition();
break;
// 중략 //
/////////////////////////////////////////////////////////////
}
p_OK=new Command;
위의 이부분에서 오류가 납니다. 디버그 하니깐 아래같은 메시지가 나오는데...
Unhandled exception in Client_Service.exe(MSVCRTD.DLL):0xC0000005: Access Violation.
다른곳에서도 (p_OK=new Command;) 쓰는 명령어인데 저부분에서만 에러가 나니 ㅜㅜ..
무엇이 문제인지 도저히 알수가 없습니다. ㅜㅜ.. 오류 부분 찾는다고 엄청 삽 펏는데.. 찾아도 어떻게 할수 없으니 답답하네요.
바로 직전에
바로 직전에 p_MapPoint에서 생성은 MAPPOINT 타입으로 하시고, memcpy는 CROSSPOINT의 크기를 기준으로 하셨네요. sizeof(CROSSPOINT) > sizeof(MAPPOINT) 라서, 거기서 힙이 깨진 듯합니다.
왜 이걸 못봤는지
왜 이걸 못봤는지 ㅜㅜ....
정말 고맙습니다.
1%의 가능성이면 충분하다!
최선을 다하자!
1%의 가능성이면 충분하다!
최선을 다하자!
댓글 달기