Este es el método guardar de la clase Lista (que escribe los elementos de la lista (los Contactos) en un archivo:
Código
bool Lista::guardar(char* nombreArchivo) { FILE* archivo = 0; Nodo* itr = m_cabeza; // puntero que itera por todos los elementos de la lista, iniciando por la cabeza. archivo = fopen(nombreArchivo, "wb"); if(archivo == 0){ return false; } fwrite(&m_tamano, sizeof(int), 1, archivo); // lo primero que escribo es el numero de elementos de la lista. for(int i = 0; i < m_tamano; i++) { // cada elemento de la lista tiene un contacto que voy a escribir en el archivo, por eso: itr->m_contacto. fwrite( &(itr->m_contacto), sizeof(Contacto), 1, archivo); itr = itr->m_siguiente; } fclose(archivo); return true; }
Y el método leer que también está en la clase Lista:
Código
bool Lista::read(char* nombreArchivo) { FILE* archivo = 0; archivo = fopen(nombreArchivo, "rb"); if(archivo == 0) { return false; } Contacto contacto; int numContactos = 0; fread(&numContactos, sizeof(int), 1, archivo); // leo el numero de contactos para saber cuantos contactos voy a recuperar del archivo cout << "NUMERO DE CONTACTOS: " << numContactos << endl; while(numContactos != 0) { fread(&contacto, sizeof(Contacto), 1, archivo); append(contacto); //append es el metodo de la Lista que inserta un elemento en la misma numContactos--; } fclose(archivo); return true; }
Pero el programa explota tan pronto como llamo al metodo leer (al inicio de main) y sale que Windows ha encontrado un problema y el programa debe cerrarse... No entiendo porque pasa eso, estoy cansado de darles vueltas al asunto. Lo único que consigo extraer del archivo es el numero de contactos, pero después si quiero acceder a una de las propiedades de los contactos que he recuperado del archivo, explota.