Error en la lectura de archivos binarios
Publicado por nDante (2 intervenciones) el 30/08/2014 12:29:09
He escrito el siguiente código:
Y lo compilo bajo Linux con:
(La mayoría de los include y las opciones de compilación son "genéricas" de mi IDE)
Bueno ahora viene lo, para mi, sorprendente. El programa compila normalmente, pero cuando ejecuto la aplicacion la salida es:
Osea... las salidas son las correctas ¿¿¡¡que pasa!!??
Añado. Si comento la parte donde se lee el fichero ( El fichero se crea igualmente ), el programa funciona correctamente y como se espera (Quedando la estructura "salida" como en un principio ).
Muchas gracias.
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
# include <iostream>
# include <string>
# include <fstream>
# include <math.h>
# include <ctime>
# include <dirent.h>
using namespace std;
const bool TRUE=1;
const bool FALSE=0;
struct PRUEBA
{
PRUEBA ();
string a;
unsigned short int b;
float c;
};
PRUEBA::PRUEBA ()
{
a = "";
b = 0;
c = 0;
}
int main ()
{
PRUEBA entrada, salida;
string nombre_archivo = "prueba.pru";
cout << "Entrada antes ->\t" << entrada.a << "\n";
cout << "Salida antes ->\t" << salida.a << "\n";
entrada.a = "pepe";
entrada.b = 5;
entrada.c = 2.3;
ofstream efichero( nombre_archivo.c_str (), ios::out | ios::binary);
efichero.write ( reinterpret_cast <char *> ( &entrada ), sizeof ( PRUEBA ));
efichero.close ();
cout << "Entrada medio ->\t" << entrada.a << "\n";
cout << "Salida medio ->\t" << salida.a << "\n";
ifstream sfichero( nombre_archivo.c_str (), ios::in | ios::binary);
sfichero.read ( reinterpret_cast <char *> ( &salida ), sizeof ( PRUEBA ));
sfichero.close ();
cout << "Entrada final ->\t" << entrada.a << "\n";
cout << "Salida final ->\t" << salida.a << "\n";
cout << "Hello, world!\n";
}
Y lo compilo bajo Linux con:
1
g++ -std=c++11 -o prueba main.cpp -ggdb -L/usr/X11R6/lib -lX11 -lGL -lglut
(La mayoría de los include y las opciones de compilación son "genéricas" de mi IDE)
Bueno ahora viene lo, para mi, sorprendente. El programa compila normalmente, pero cuando ejecuto la aplicacion la salida es:
1
2
3
4
5
6
7
8
9
10
*** Error in `../pruebas': double free or corruption (fasttop): 0x0000000000f41040 ***
Entrada antes ->
Salida antes ->
Entrada medio -> pepe
Salida medio ->
Entrada final -> pepe
Salida final -> pepe
Hello, world!
*** Colgado con el código: 0 ***
Osea... las salidas son las correctas ¿¿¡¡que pasa!!??
Añado. Si comento la parte donde se lee el fichero ( El fichero se crea igualmente ), el programa funciona correctamente y como se espera (Quedando la estructura "salida" como en un principio ).
Muchas gracias.
Valora esta pregunta
0