Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Drumpi on May 01, 2013, 07:35:44 PM

Title: Error con lista enlazada r263
Post by: Drumpi on May 01, 2013, 07:35:44 PM
Hola a todos:

Hace tiempo que no me paso por aquí, ¿verdad? ^^U
Bueno, ando programando para el concurso de Donan, y vamos justitos de tiempo, así que necesito cuatro ojos.
Tengo el lista_items.inc que os adjunto, que maneja una lista enlazada del tipo obj_item que se guarda en la variable global lista_objetos_obtenidos (ambas definidas en el items.h).
Pues cuando lo pruebo en el juego, me salta la típica ventana de fallo grave de windows, indicando error al acceder a un puntero, concretamente al hacer la operación de la línea 23 (pasar el puntero a la posición siguiente) o al comprobar si el puntero que contiene vale null.
Obviamente, lo probé de forma aislada al juego, ejecutando la función debug_lista_items() que incluyo, y se me cuelga cuando se añade el segundo objeto (según los SAY) o a veces ni eso, se queda como en un bucle infinito.

Estoy usando la versión r263, que es la última estable que tengo (la r307 tiene ese bug con los gráficos). A ver si vosotros veis algo que haya escrito mal. Son simples funciones de añadir nodo al final de la lista, borrado de la lista y recorrido de la lista obteniendo datos, pero yo no veo fallos, aun comparando con otros códigos que sé que funcionan.
Si os falta alguna variable, omitid la función borrar_items_del_mapa(), no es relevante para el funcionamiento de la función de debug, y es casi una copia de comprobar_lista_items().

Muchas gracias, a ver si es una tontería, como siempre, y con el cansancio no veo ya tres montados en un burro :D :D :D

PD: suerte a los demás participantes ;)
Title: Re:Error con lista enlazada r263
Post by: Drumpi on May 07, 2013, 12:21:14 AM
Bueno, aunque el concurso ya haya terminado, sigo necesitando que alguien me ilumine ^^U
Ahora no podeis poner la excusa de la rivalidad para no responder :D :D :D
Title: Re:Error con lista enlazada r263
Post by: SplinterGU on May 07, 2013, 01:21:39 PM
lo vere en estos dias, disculpa la falta de respuesta.
Title: Re:Error con lista enlazada r263
Post by: Drumpi on May 10, 2013, 07:58:23 PM
No pasa nada, ahora mismo estoy liado con el ordenador, así que no hay tanta prisa :D
De momento lo tengo solucionado enlazando procesos congelados, que hacen las veces de nodos (sí, estilo Java).
Title: Re:Error con lista enlazada r263
Post by: Erkosone on May 11, 2013, 02:16:55 AM
Vaya.. no se me hubiera ocurrido en la vida.. de verdad.. no sabes que buena idea me has dado Drumpi, muchas gracias en serio, llevo planteando unos días una historia con las listas dinámicas.. y mira tu por donde.. que mejor que un proceso como nodo para simplificar? pues nada XD.. es lo mas simple!
Gracias por la idea!!
Title: Re:Error con lista enlazada r263
Post by: Drumpi on May 11, 2013, 04:23:54 PM
Jajaja, de nada, pero de todas formas, yo valoraría mirar el usar mejor memoria dinámica antes que procesos. No he hecho un test de velocidad, pero ten en cuenta que crear un proceso conlleva reservar mucha más memoria que con una estructura de datos, es, en teoría, más lento a la hora de crear y destruir, y añade tiempo extra al gestor de procesos al tener más que mirar.
Pero es sólo en teoría, no he podido demostrarlo, quizás, al crear/destruir procesos, al ser comandos del sistema (internos a Bennu) son mucho más rápidos que los comandos del propio lenguaje Bennu.

Pero sí, para acostumbrarse a usar listas enlazadas, usar procesos es lo más simple para aprender. Si te dejas algo en memoria sin borrar, el proceso queda activo y el programa no se cierra, y si intentas eliminar un proceso que ya había sido borrado o que el contenido del puntero está mal, te dará el mensaje de que dicho proceso no existe. No hay peligro para el ordenador ;)
Title: Re:Error con lista enlazada r263
Post by: SplinterGU on May 20, 2013, 12:41:52 AM
drumpi, por favor, ponme un sample compilable... ahorrame el tiempo de contruirlo, asi puedo ayudarte.

saludos.
Title: Re:Error con lista enlazada r263
Post by: Drumpi on May 26, 2013, 07:06:07 PM
Bueno, era crear un main típico que incluyera los ficheros, que llamase a la función y tener a mano un bgdc.import genérico que... bueno, que no tengo excusas, que aquí lo subo ready to compile and run ;)
Title: Re:Error con lista enlazada r263
Post by: Drumpi on June 22, 2013, 12:36:41 PM
¿Alguien ha visto algún error en el código? He intentado verlo de nuevo con "otra perspectiva" pero sigo sin ver nada raro.
Title: Re:Error con lista enlazada r263
Post by: Arcontus on June 30, 2013, 09:19:20 AM
Quote from: Drumpi on June 22, 2013, 12:36:41 PM
¿Alguien ha visto algún error en el código? He intentado verlo de nuevo con "otra perspectiva" pero sigo sin ver nada raro.
El problema está en como generas el objeto "obj_item".
function add_item_conseguido (numero, pos_x, pos_y)
private
    obj_item pointer new_ptr;
    obj_item pointer aux_ptr;
begin
    //se crea el nuevo objeto
    new_ptr=alloc(sizeof(obj_item pointer));


Tu haces un alloc de un puntero y obviamente no deseas hacer eso, lo que tu quieres es reservar un cacho de memoria para almacenar datos, por lo que tienes que reservar el espacio de memoria para guardar los datos. Tan simple como cambiar "new_ptr=alloc(sizeof(obj_item pointer));" por "new_ptr=alloc(sizeof(obj_item));"
No he continuado analizando el código ya que con ese cambio a mi se me ejecuta correctamente.

Un saludo!
Title: Re:Error con lista enlazada r263
Post by: Drumpi on August 03, 2013, 06:28:40 PM
please, kill me ^^U

Efectivamente es un error gordo, y bastante obvio cuando no estás enfrascado en el código. Le echaré un vistazo en el código, porque ya con eso debería ir de miedo.

Muchas gracias, Arcontus. Karma++