[C++] [?] SIGSEGV

Iniciado por marlboreano, 15 Marzo 2015, 15:36 PM

0 Miembros y 1 Visitante están viendo este tema.

marlboreano

Hola a todos.

Tengo un pequeño gran problema con archivos y todo el estandar :B. Lo que quería hacer (por hacer, nada de facultad ni por el estilo) era guardar en un fichero unos 3 strings, y luego cargarlos dentro de un programa con ventanas. Hasta ahí, todo bien, el tema me surge cuando cargo los strings (me los devuelve con basura). Les dejo el código para que me remarquen el error, ya que sé que será de novato, pero no lo encuentro.

Código (cpp) [Seleccionar]
#include "frmVentana.h"
#include <wx/msgdlg.h>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;

frmVentana::frmVentana(wxWindow *parent) : Frame1(parent) {
aux = "";
Show();
ofstream salida("datos.dat",ios::binary|ios::trunc);
if (!salida.is_open()) {
wxMessageBox("No se pudo guardar");
}
aux = "Nombre";
salida.write(reinterpret_cast<char*>(&aux),sizeof(string));
aux = "00";
salida.write(reinterpret_cast<char*>(&aux),sizeof(string));
aux = "C:\\una_imagen.png";
salida.write(reinterpret_cast<char*>(&aux),sizeof(string));
salida.close();
}

frmVentana::~frmVentana() {

}

void frmVentana::CargarNomClick( wxCommandEvent& event )  {
ifstream archivo("datos.dat",ios::binary|ios::ate);
if (!archivo.is_open()) {
wxMessageBox("No se pudo cargar");
}
archivo.seekg(0*sizeof(string));
aux.clear();
archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
archivo.close();
lblNombre->SetLabel(aux);
}

void frmVentana::CargarValorClick( wxCommandEvent& event )  {
ifstream archivo("datos.dat",ios::binary|ios::ate);
if (!archivo.is_open()) {
wxMessageBox("No se pudo cargar");
}
archivo.seekg(1*sizeof(string));
aux.clear();
archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
archivo.close();
lblValorGral->SetLabel(aux);
}

void frmVentana::CargarImgClick( wxCommandEvent& event )  {
ifstream archivo("datos.dat",ios::binary|ios::ate);
if (!archivo.is_open()) {
wxMessageBox("No se pudo cargar");
}
archivo.seekg(2*sizeof(string));
aux.clear();
archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
archivo.close();
wxBitmap a;
a.LoadFile(aux,wxBITMAP_TYPE_PNG);
imgPais->SetSize(a.GetWidth(),a.GetHeight());
imgPais->SetBitmap(a);
}

void frmVentana::CargarIcoClick( wxCommandEvent& event )  {
ifstream archivo("datos.dat",ios::binary|ios::ate);
if (!archivo.is_open()) {
wxMessageBox("No se pudo cargar");
}
archivo.seekg(2*sizeof(string));
aux.clear();
archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
archivo.close();
wxBitmap a;
a.LoadFile(aux,wxBITMAP_TYPE_PNG);
icoPais->SetSize(a.GetWidth(),a.GetHeight());
icoPais->SetBitmap(a);
}


P.D.: Integro wxFormBuilder (wxWidget) al código para crear mis ventanas, botones, labels, etc.
P.D.2: Utilizo un string "aux" que está declarado como privado en la clase "frmVentana".
P.D.3: Suelo utilizar nombres bien 'boludos' para las clases heredadas, por lo tanto confío en que sabrán que un "lblNombre" es una etiqueta en donde se mostrará un string "nombre".

Desde ya, muchas gracias :).

ivancea96

No puedes hacer un casting de string a char*. Usa en su lugar aux.c_str().
No pongas sizeof(string). Pon aux.size().