Reading a binary file causes the program to crash

Hi,

My gives me the first lecture when reading a binary file, but then it crashes, i have no idea why whatsoever.

Please help
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>

#include "Criminal.h"

void imprimirLinea( std::ostream&, const Criminal &);
void buscarLinea( std::fstream& );

int main()
{
    std::fstream lista;

    lista.open(" Delincuentes.dat ", std::ios::in | std::ios::out | std::ios::binary);

    if(!lista)
    {
        std::cerr << "Archivo Inaccesible." << std::endl;
        std::exit(1);
    }

    Criminal ClaseCriminal;

    lista.read( reinterpret_cast< char * >(&ClaseCriminal), sizeof(Criminal));

    while ( lista && !lista.eof())
    {
        if (ClaseCriminal.getnumeroSerie() != 0)
            imprimirLinea( std::cout, ClaseCriminal );

            lista.read( reinterpret_cast< char * >( &ClaseCriminal ), sizeof( Criminal ));
    }
    return 0;
}

void imprimirLinea( std::ostream &salida, const Criminal &registro )
{
    salida << "Numero de Serie: " << registro.getnumeroSerie() << " Tipo de crimen: "  << registro.gettipoCrimen() << std::endl;
    salida << "Nombre: " << registro.getNombre() << registro.getApellido() << std::endl;
    salida << "Edad: " << registro.getedad() << " Peso: " << registro.getpeso() << " Altura: " << registro.getaltura() << " Genero: " << registro.getgenero() << std::endl;
    salida << "Direccion: " << registro.getdireccionCompleta() << std::endl;
    salida << "Trabajo: " << registro.getlugarTrabajo() << " Color Ojos: " << registro.getcolorOjos() << std::endl;
    salida << "Nacionalidad: "  << registro.getNacionalidad() << " Color Cabello: " << registro.getcolorCabello() << std::endl;
    salida << "Huella Digital: "  << registro.gethuellaDigital() << "Fotografia: " << registro.getfotografia() << std::endl;
}
You forgot to post Criminal.h...
Anyway, you should write proper de/serialization functions for the Criminal class. You can't just write and read the internal layout of non-PODs or objects that contain pointers (directly or indirectly) or handles to other resources directly to/from a file.
Thanks Athar, i'll start declaring everything

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#ifndef CRIMINAL_H
#define CRIMINAL_H
#include <sstream>


class Criminal{
private:
    /*Información no modificable de la clase
    Los arreglos de Caracteres serán utilizados
    como Strings más adelante, sin embargo tienen
    longitud fija para facilitar su manipulación*/
    int valornumeroSerie, valoredad, valorpeso, valoraltura;
    std::string valortipoCrimen;
    std::string valorNombres;
    std::string valorApellidos;
    std::string valordireccionCompleta;
    std::string valorlugarTrabajo;
    std::string valorcolorOjos;
    std::string valorNacionalidad;
    std::string valorcolorCabello;
    std::string valorgenero;
    std::string valorhuellaDigital;
    std::string valorfotografia;

public:
    /*Constuctor: Crea un Criminal con los siguientes Valores
    Número de Serie, Tipo de Crimen, Nombre Completo (4 std::strings), Género
    Edad, Peso, Altura, Dirección (2 std::strings), lugar de Trabajo, Color de Ojos,
    Color de Piel, Color de Cabello, Huella Digital, Fotorafía*/
    Criminal(int=0, std::string = "",
             std::string = "", std::string = "", std::string = "",
             int=0, int=0, int=0,
             std::string = "", std::string = "",std::string = "",
             std::string = "",std::string = "",std::string = "",std::string = "");

    //Funciones de Acceso para Número de Serie
    void setnumeroSerie(int nSerie)
    {
        valornumeroSerie = nSerie;
    }
    int getnumeroSerie() const
    {
        return valornumeroSerie;
    }

    //Funciones de Acceso para Tipo de Crimen
    void settipoCrimen(const std::string & tipoCrimen)
    {
        valortipoCrimen = tipoCrimen;
    }
    const std::string & gettipoCrimen() const
    {
        return valortipoCrimen;
    }

    //Funciones de Acceso para Nombres
    void setNombre( const std::string & nombre )
    {
        valorNombres = nombre;
    }
    const std::string & getNombre() const
    {
        return valorNombres;
    }

    //Funciones de Acceso para Primer Apellido
    void setApellido( const std::string & apellidos )
    {
        valorApellidos = apellidos;
    }
    const std::string & getApellido() const
    {
        return valorApellidos;
    }

    //Funciones de Acceso para Género
    void setelGenero(const std::string & genero)
    {
        valorgenero = genero;
    }
    const std::string & getgenero() const
    {
        return valorgenero;
    }

    //Funciones de Acceso para Edad
    void setedad(int edad)
    {
        valoredad = edad;
    }
    int getedad() const
    {
        return valoredad;
    }

    //Funciones de Acceso para Peso
    void setpeso(int peso)
    {
        valorpeso = peso;
    }
    int getpeso() const
    {
        return valorpeso;
    }

    //Funciones de Acceso para Altura
    void setaltura(int altura)
    {
        valoraltura = altura;
    }
    int getaltura() const
    {
        return valoraltura;
    }

    //Funciones de Acceso para Dirección Calle
    void setdireccionCompleta(const std::string & direccionCompleta)
    {
        valordireccionCompleta = direccionCompleta;
    }
    const std::string & getdireccionCompleta() const
    {
        return valordireccionCompleta;
    }

    //Funciones de Acceso para Lugar de Trabajo
    void setlugarTrabajo(const std::string & lugarTrabajo)
    {
        valorlugarTrabajo = lugarTrabajo;
    }
    const std::string & getlugarTrabajo() const
    {
        return valorlugarTrabajo;
    }

    //Funciones de Acceso para Color de Ojos
    void setcolorOjos(const std::string & cOjos)
    {
        valorcolorOjos = cOjos;
    }
    const std::string & getcolorOjos() const
    {
        return valorcolorOjos;
    }

    //Funciones de Acceso para Color de Piel
    void setNacionalidad(const std::string& nacionalidad)
    {
        valorNacionalidad = nacionalidad;
    }
    const std::string & getNacionalidad() const
    {
        return valorNacionalidad;
    }

    //Funciones de Acceso para Color de Cabello
    void setcolorCabello(const std::string& cCabello)
    {
        valorcolorCabello = cCabello;
    }
    const std::string & getcolorCabello() const
    {
        return valorcolorCabello;
    }

    //Funciones de Acceso para Huella Digital
    void sethuellaDigital(const std::string& hDigital)
    {
        valorhuellaDigital = hDigital;
    }
    const std::string & gethuellaDigital() const
    {
        return valorhuellaDigital;
    }

    //Funciones de Acceso para Fotografía
    void setfotografia(const std::string& foto)
    {
        valorfotografia = foto;
    }
    const std::string & getfotografia() const
    {
        return valorfotografia;
    }
};

    //Constructor del Criminal
Criminal::Criminal(int nSerie, std::string tipoCrimen,
             std::string nombre, std::string apellidos, std::string genero,
             int edad, int peso, int altura,
             std::string direccionCompleta, std::string lugarTrabajo,std::string nacionalidad,
             std::string cOjos,std::string cCabello,std::string hDigital,std::string foto){}
    //Finaliza Constructor de Criminal

//-----------------------------------------------

#endif 
Topic archived. No new replies allowed.