|
MAP_IMAGE::iterator now;
HEADER *Header;
String sRecvBuf, strPeerIP, str_info;
unsigned char rcvBuf[4096];
int rcvSize = 0;
String ret = 0;
memset(rcvBuf, 0x0, sizeof(rcvBuf));
strPeerIP = AThread->Connection->Socket->Binding->PeerIP;
try
{
if ( AThread->Connection->Connected() )
{
AThread->Connection->ReadBuffer(rcvBuf, sizeof(HEADER));
Header = (HEADER *)rcvBuf;
Header->length = (rcvBuf[4]<<8)+rcvBuf[5];
AThread->Connection->ReadBuffer(rcvBuf+sizeof(HEADER), Header->length + sizeof(TAIL));
now = Form_Main->map_img.find(Header->id);
//if ( now != Form_Main->map_img.end() ) {
if ( now == Form_Main->map_img.end() ) {
now->second->Socket->Recv(rcvBuf, rcvSize); <----이부분에서 access가 안됩니다.
코드는 이러하구요
구조체 같은경우는
//헤더부 : 6byte
typedef struct {
unsigned char stx;
unsigned char opcode;
unsigned char id;
unsigned char dummy;
unsigned short length;
} HEADER;
//테일부 : 2byte
typedef struct {
unsigned char checksum;
unsigned char etx;
} TAIL;
typedef struct
{
unsigned char id;
unsigned char comm;
unsigned char reconnect;
unsigned char m_Polling;
int useyn;
int delyn;
int ThreadID;
String IP;
PTSocket *Socket;
} ST_IMAGE;
typedef map<int, ST_IMAGE *> MAP_IMAGE;
MAP_IMAGE map_img; 이렇게 메인폼헤더부분에 선언되어있구요.
근데 저기 부분이 도대체 왜 에러인지 이해가안가요제가
소스를 보고 이해한건 이러한데요
rcvBuf 란 변수에 데이터를 잘받아와졌고 헤더에적힌 Header->length만큼
데이터를 잘가지고왔으며 now라는 변수에 주소값이 들어가는것으로 보아
now라는 변수에 들어가서 id와 똑같은 부분을 찾은것 같고 그래서 제가 ST_IMAGE 여기에
데이터가 안쌓였을까해서 브레이크포인트해서 돌려보니까 잘들어가고있었구요
그래서 now 까지 잘 되다가
now->second->Socket->Recv(rcvBuf, rcvSize);
여기서 access violation 경고창이 뜨더라구요
포인터라던가 배열이 잘못되었나 메모리가 넘어버렸나 메모리 초기화 안시켜서
생각을 해봤는데 도무지 저게 어떤에런지 모르겠고
now 가문젠지 second 가 문젠지 socket이문젠지 어디가
문젠지 알수있는 방법도 모르겠고
도와주세요.ㅠㅠ
|