• Martes 30 de Abril de 2024, 10:56

Autor Tema:  debug y release y SYSTEMTIME  (Leído 1780 veces)

blasata

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
debug y release y SYSTEMTIME
« en: Miércoles 17 de Marzo de 2010, 11:52 »
0
Hola a todos,
 tengo un problemón con esta función para conectarme por sockets a un servidor

Código: C++
  1. int conectar(char IP[], int Puerto)    
  2. {
  3.         WSADATA wsa;
  4.        SOCKET buzonete;  
  5.        // Struct hostent *host;
  6.        struct sockaddr_in direc;
  7.        int conex;    
  8.        //Inicializamos
  9.        WSAStartup(MAKEWORD(2,2),&wsa);
  10.        escribelog("Intentando crear Socket...");
  11.        do
  12.         {  buzonete = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //creamos el socket  
  13.            printf("Intentando crear el Socket...n");
  14.            Sleep(1000);
  15.         }
  16.        while (buzonete == -1);
  17.         escribelog("Socket creado...");
  18.        // Definimos la dirección a conectar
  19.        direc.sin_family = AF_INET;
  20.        direc.sin_port = htons(Puerto);                
  21.        direc.sin_addr.s_addr = inet_addr( &IP[0] );  
  22.        memset(direc.sin_zero,0,8);        
  23.  
  24.        escribelog("Conectando ...");
  25.        printf("Intentando conexion ...n"); 
  26.        do
  27.         {   conex = connect( buzonete, (sockaddr *)&direc, sizeof(sockaddr) );
  28.             Sleep(1000);  
  29.         }
  30.        while (conex==-1);
  31.        printf("Conectado  n");
  32.        
  33.        return buzonete;
  34. }
  35.  
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++
  1.  printf("Conectado  n");
  2.  
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++
  1.  char sip[6];
  2.      SYSTEMTIME ahora;
  3.      sprintf(sip,"%s", ahora.wYear);
  4.  

 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

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: debug y release y SYSTEMTIME
« Respuesta #1 en: Lunes 29 de Marzo de 2010, 10:40 »
0
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.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

blasata

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: debug y release y SYSTEMTIME
« Respuesta #2 en: Miércoles 31 de Marzo de 2010, 07:11 »
0
gracias.. una cosa más para la libretita
  :comp: