Este año parece ser que las bases de datos no se llevan bien conmigo!!!
Resulta que tengo una base de datos en la cual almaceno una lista de personajes. Se que se almacenan bien ya que tengo editor hexadecimal y he comprobado que en la base de datos no hay duplicados de personajes ni les falta ningun tipo de datos de los que yo introduzco.
Sin embargo, al cargar las bases de datos en una lista enlazada para usarlas en el programa, sin previo aviso se me duplica el último personaje que haya en ese momento en la base de datos, o triplica...he llegado incluso a tener 4 o 5 veces el mismo personaje. Además si tengo dos o más personajes, el último personaje, que es el que se duplica, cambia uno de sus atributos (archivo) por el del primer personaje.
Las funciones que empleo para guardar y cargar estos datos son las siguientes:
Cargar lista de personajes:
Código C:
Ver original
void crearListaPersonajes(Personaje *personajes, char *nom_archivo) { tipoPersonaje personaje; FILE *ptr; int i, num, cantidad; long int pos; personajes->_next = NULL; // Compruebo existencia de archivo y nº de registros num = NumRegArchivoBin(nom_archivo, sizeof(tipoPersonaje)); if(num) { for(i=0;i<num;i++) { cantidad = personaje.numResp; personaje.answers = *crearListaRespuestas(nom_archivo, ptr, pos, cantidad); anyadirPersonaje(personajes, personaje); } } // fin if _num }
Cargar respuestas asociadas a cada personaje (la llamo desde la funcion anterior...linea 20)
Código C:
Ver original
Respuestas * crearListaRespuestas(char *nom_archivo, FILE *ptr, long int pos, int cantidad) { tipoRespuesta respuesta; Respuestas respuestas = {0}; int i; lista->_next = NULL; for(i=0;i<cantidad;i++) { anyadirRespuesta(lista, respuesta); } return lista; }
Y por último, la funcion de guardar personaje:
Código C:
Ver original
void guardarListaPersonajes(Personaje lista, char *nomArchivo) { FILE *ptr; Personaje *temp; // Compruebo existencia de registros if(ptr == NULL) { Pausa(); } temp = lista._next; // primer nodo de la lista while(temp) { //temp->_personaje.answers = *temp->_personaje.answers._next; while(temp->_personaje.answers._next != NULL) { temp->_personaje.answers = *temp->_personaje.answers._next; } temp=temp->_next; // siguiente nodo } }
El problema imagino que tendrá que estar dentro de las funciones de cargar...Si alguien me pudiera orientar para ver el error...porque la verdad es que yo ya no veo qué es lo que puede estarme fallando...
Gracias de antemano, un saludo