Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Falla al ejecutarse, pero no al depurarse... ¿Posible?

Iniciado por 16BITBoy, 20 de Junio de 2008, 05:22:19 PM

« anterior - próximo »

16BITBoy

Buenas, pues tengo un problema muy extraño, resulta que estoy codificando una clase, y luego la uso en el codigo creando un objeto de el.

Esta clase, por donde sea aunque a ojo no lo encunetro, tiene que tener un fallo, pero lo curioso es que cunado ejecuto el modo debug (GDB) el programa se ejecuta perfectamente xDD.

Me da que algo ocurre que el GDB esta haciendo debug de alguna compilación anterior a la actual pues mediante GDB no detecto nada. Aunque puede que no... hago un paso a paso donde creo puede estar el error y nada extraño ocurre. Ni desbordamientos ni nada parecido, y el programa se ejecuta a las mil maravillas. Vereis tengo esto:


class KEYBOARD_EVENTS
{

   private:
       class KEY_EVENTS
       {
           public:
               int value;
               int event_suceeded;
               int event_type;
       };
   public:

       KEY_EVENTS keyevents[128];

       KEYBOARD_EVENTS()
       {
           int i;
           for (i=0; i<=128; i++)
           {
               keyevents[i].value = 0;
               keyevents[i].event_suceeded = 0;
               keyevents[i].event_type = 0;
           }
       }

la clase sigue, pero el problema no puede estar fuera de esto, pues no llega a ejecutar ninguna otra función que no sea el constructor.

en mi otro procedimiento, creo un objeto de esta clase:

void init_gameloop()
{
   LOCK_VARIABLE(speed_counter);
LOCK_FUNCTION(increment_speed_counter);

LOCK_VARIABLE(fps);
LOCK_VARIABLE(frame_count);
LOCK_FUNCTION(fps_proc);

install_int_ex(increment_speed_counter, BPS_TO_TIMER(30));
install_int(fps_proc, 1000);


   kbEvents = new KEYBOARD_EVENTS(); // <<-- AQUI LO CREO

   buffer = create_bitmap(vConf->w,vConf->h);

   // Finally, enter the game loop
   gameloop();

   // Removing timers, we dont need them anymore
   remove_int(increment_speed_counter);
remove_int(fps_proc);

}


Uso el ide Code::Blocks 8.02 junto con mingw, y la libreria allegro.

Aver si alguen se le ocurre de que puede ser, a mi ya me tiene mareado xD, aun sigo buscando el porque, y lo que aun siendo tan extraño error, me sigue pareciendo una tonteria que estará por ahi y no la veo, aun asi he dedicido dejar este tema aqui aver si alguen puede hecharme una mano, por que es que llevo ya buen tiempo mirandomelo todo y no doy con el problema.

Decir tambien que si quito la línea :



kbEvents = new KEYBOARD_EVENTS(); // <<-- AQUI LO CREO



el programa se ejecuta con normalidad, por lo que el problema con mas razón debe estar en la clase que dije antes, pero donde, y mas dificil es encontrarlo si el debug no me dice ningun error, por mucha variable que inspeccione.

Un Saludo!

Jare

i<=128
Prueba con < solamente. Te estas saliendo del array.

misscelan

Ten en cuenta que el modo debug te inicializa las variables cosa que si no haces tú no lo hará en la versión normal.

Un saludo.

Mars Attacks

Ya que estamos, un consejo de "estilo" de programación. Cuantos menos números mágicos uses, mejor.

En tu código, mejor un
#define MAX_NUM_KEYBOARD_EVENTS 128

y usar MAX_NUM_KEYBOARD_EVENTS en lugar de 128 por ahí. Así ganas en legibilidad (porque sabes a simple vista qué era ese 128) y en mantenibilidad, porque si algún día necesitas que el tope sean 256 sólo tienes que cambiarlo en un sitio, y no en treinta.

El fallo real de tu código ya te lo han comentado :) Es buena costumbre acostumbrarse también a hacer inicializadores (o constructores) que pongan siempre algún tipo de parámetro por defecto (bien uno válido neutro o uno inválido que puedas comprobar luego para asegurar el buen funcionamiento de la aplicación).

Fin :)

16BITBoy

vaya tela del telón !! !!
y yo todo convencido de que de eso no era y mira k es lo primero k miro en un bucle, (ahora me dires, metiroso xDD) y encima eso lo sabia!!!.

Nada que tengo las cosas delante y no las veo... veo perfectamente pero lo que veo no lo veo que este xDD como cuando me dicen coje noseque cualquier cosa y la tengo en mis narices y no la veo xDD. Y os parecera mentira, que llevo 1 dia entero parado con el programita por que aun no habia visto eso xDDDDD

Muchas gracias ;)

fjfnaranjo

Ahh, tranquilo. Estas cosas nos pasan a todos. Especialmente cuando uno se obstina mucho con un código que no se ejecuta... yo al menos acabo viendo los errores donde no están :P

Hay por Internet buenos tutos para trazar y depurar programas, si te interesa ya sabes, google!
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.