переменная uint32_t странно меняется

У меня есть простой код:

#define NUM_UA_SOCK     100

typedef struct _UA_REQUEST
{
string full_url;
uint32_t        url_adler32 ;
TCPsocket   sock_ua ;
uint32_t    status_flag ;               // ref Enum STATUS
} UA_REQUEST ;

UA_REQUEST  GLB_ARRAY__UA_REQ[ NUM_UA_SOCK ] ;

void handle_ua_sock_ready( uint32_t ii )
{
string _req_mstr;

byte*request    = (byte*) _req_mstr.c_str() ;
byte*pcrlf  = NULL ;

UA_REQUEST*ar = GLB_ARRAY__UA_REQ ;

// Get request from UA
int32_t nrcv ;

printf("index =  %lu\n", ii);
TCPsocket sock = ar[ii].sock_ua;
nrcv = SDLNet_TCP_Recv( sock , request , MAXLEN ) ;
printf("After index =  %lu\n", ii);
}

Переменная ii в начале функции handle_ua_sock_ready () имеет значение 0. После вызова nrcv = SDLNet_TCP_Recv (носок, запрос, MAXLEN); линия становится иметь что-то очень большое значение, например, 1852397344.
Это однопоточное приложение. Я использую библиотеки VS 2010, SDL, SDL_net.
PS: когда я скомпилировал его под Linux, он работает нормально.

0

Решение

Вы проходите в request к SDLNet_TCP_Recv функционировать и говорить эту функцию, которая request указывает на буфер размера MAXLEN, Как request исходит от отбрасывания констант из буфера пустого std::string это явно неправильно.

Вы хотите вектор

std::vector<unsigned char> request;
request.resize(MAXLEN);

...

nrcv = SDLNet_TCP_Recv( sock , request.data() , request.size() ) ;
0

Другие решения


По вопросам рекламы [email protected]