elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] [?] SIGSEGV
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] [?] SIGSEGV  (Leído 1,386 veces)
marlboreano

Desconectado Desconectado

Mensajes: 23



Ver Perfil
[C++] [?] SIGSEGV
« en: 15 Marzo 2015, 15:36 pm »

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
  1. #include "frmVentana.h"
  2. #include <wx/msgdlg.h>
  3. #include <fstream>
  4. #include <sstream>
  5. #include <string>
  6. using namespace std;
  7.  
  8. frmVentana::frmVentana(wxWindow *parent) : Frame1(parent) {
  9. aux = "";
  10. Show();
  11. ofstream salida("datos.dat",ios::binary|ios::trunc);
  12. if (!salida.is_open()) {
  13. wxMessageBox("No se pudo guardar");
  14. }
  15. aux = "Nombre";
  16. salida.write(reinterpret_cast<char*>(&aux),sizeof(string));
  17. aux = "00";
  18. salida.write(reinterpret_cast<char*>(&aux),sizeof(string));
  19. aux = "C:\\una_imagen.png";
  20. salida.write(reinterpret_cast<char*>(&aux),sizeof(string));
  21. salida.close();
  22. }
  23.  
  24. frmVentana::~frmVentana() {
  25.  
  26. }
  27.  
  28. void frmVentana::CargarNomClick( wxCommandEvent& event )  {
  29. ifstream archivo("datos.dat",ios::binary|ios::ate);
  30. if (!archivo.is_open()) {
  31. wxMessageBox("No se pudo cargar");
  32. }
  33. archivo.seekg(0*sizeof(string));
  34. aux.clear();
  35. archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
  36. archivo.close();
  37. lblNombre->SetLabel(aux);
  38. }
  39.  
  40. void frmVentana::CargarValorClick( wxCommandEvent& event )  {
  41. ifstream archivo("datos.dat",ios::binary|ios::ate);
  42. if (!archivo.is_open()) {
  43. wxMessageBox("No se pudo cargar");
  44. }
  45. archivo.seekg(1*sizeof(string));
  46. aux.clear();
  47. archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
  48. archivo.close();
  49. lblValorGral->SetLabel(aux);
  50. }
  51.  
  52. void frmVentana::CargarImgClick( wxCommandEvent& event )  {
  53. ifstream archivo("datos.dat",ios::binary|ios::ate);
  54. if (!archivo.is_open()) {
  55. wxMessageBox("No se pudo cargar");
  56. }
  57. archivo.seekg(2*sizeof(string));
  58. aux.clear();
  59. archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
  60. archivo.close();
  61. wxBitmap a;
  62. a.LoadFile(aux,wxBITMAP_TYPE_PNG);
  63. imgPais->SetSize(a.GetWidth(),a.GetHeight());
  64. imgPais->SetBitmap(a);
  65. }
  66.  
  67. void frmVentana::CargarIcoClick( wxCommandEvent& event )  {
  68. ifstream archivo("datos.dat",ios::binary|ios::ate);
  69. if (!archivo.is_open()) {
  70. wxMessageBox("No se pudo cargar");
  71. }
  72. archivo.seekg(2*sizeof(string));
  73. aux.clear();
  74. archivo.read(reinterpret_cast<char*>(&aux),sizeof(string));
  75. archivo.close();
  76. wxBitmap a;
  77. a.LoadFile(aux,wxBITMAP_TYPE_PNG);
  78. icoPais->SetSize(a.GetWidth(),a.GetHeight());
  79. icoPais->SetBitmap(a);
  80. }

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 :).


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++] [?] SIGSEGV
« Respuesta #1 en: 15 Marzo 2015, 20:56 pm »

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


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines