Programación General > Visual C++

 debug y release y SYSTEMTIME

(1/1)

blasata:
Hola a todos,
 tengo un problemón con esta función para conectarme por sockets a un servidor


--- Código: C++ ---int conectar(char IP[], int Puerto)    {        WSADATA wsa;       SOCKET buzonete;          // Struct hostent *host;       struct sockaddr_in direc;       int conex;           //Inicializamos       WSAStartup(MAKEWORD(2,2),&wsa);       escribelog("Intentando crear Socket...");       do        {  buzonete = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //creamos el socket             printf("Intentando crear el Socket...n");            Sleep(1000);        }       while (buzonete == -1);        escribelog("Socket creado...");       // Definimos la dirección a conectar       direc.sin_family = AF_INET;       direc.sin_port = htons(Puerto);                        direc.sin_addr.s_addr = inet_addr( &IP[0] );         memset(direc.sin_zero,0,8);                 escribelog("Conectando ...");       printf("Intentando conexion ...n");        do        {   conex = connect( buzonete, (sockaddr *)&direc, sizeof(sockaddr) );            Sleep(1000);           }       while (conex==-1);       printf("Conectado  n");               return buzonete;} Cuando llamo a la función, en modo debug voy paso a paso, y veo como pasa por cada sentencia y se conecta. Así funciona bien......pero en release, se salta directamente a
--- Código: C++ --- printf("Conectado  n");  Y no sé por qué. Ya me ha pasado más veces esto de que se "salte" código.  :argh:
También estoy intentando esto

--- Código: C++ --- char sip[6];     SYSTEMTIME ahora;     sprintf(sip,"%s", ahora.wYear); 
 pero tampoco, me dice
     en DEBUG: que la variable está siendo usada sin estar definida en debug
     y en RELEASE: Unhandled exception at 0x10227c2f (msvcr80d.dll)  

Si hago paso a paso veo como se salta la linea SYSTEMTIME ! :brickwall:
 :hitcomp:

Ah y como podría hacer que los campos de ahora.wDay etc... si son menores de 10, aparezcan con dos cifras, es decir, si son 5 seg. por ejemplo que aparezca como 05

Gracias!

rfog:
1.- Eso se debe al optimizador de código de Visual C++: no debes preocuparte, el código se está ejecutando generalmente de una tacada en ensamblador o está saltando a alguna parte interna que ya tiene implementado lo que tu has hecho. También verás saltos raros a otras partes de tu código sin mucho sentido ni coherencia para ti. En general, lo que funciona en DEBUG funciona en RELEASE, y si no es así, ve buscando dónde está tu ]error.

2.- Es que no inicializas "ahora", por eso protesta el compilador, ya que estás copiando un valor (ahora.wYear) que no ha sido inicializado. En "sip" tendrás no sólo la misma basura que en el otro lado, sino que al tener basura quizás (lo más seguro) no haya un terminador nulo al final de wYear y estés sobreescribiendo un buen montón de memoria.

Aparte, el wYear es un WORD, un número, y tu estás poniendo un especificador de cadena, con lo que todavía la estás liando más.

3.- Si pones "%02d" en el especificador de cadena, lo que sobre a la izquierda se rellenará con ceros. En el caso que te pongo, al ser "02" es dos dígitos rellenos con ceros por la izquierda.

blasata:
gracias.. una cosa más para la libretita
  :comp:

Navegación

[0] Índice de Mensajes

Ir a la versión completa