fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

corrupcion de datos
 
Avisos
Vaciar todo

corrupcion de datos

22 Respuestas
4 Usuarios
0 Reactions
191.8 K Visitas
oriol
Respuestas: 18
Topic starter
(@oriol)
Active Member
Registrado: hace 13 años

Hola!

Tengo un problema que me esta volviendo loco y no se como resolverlo.

Es un programa trivial.
El programa carga las performances de unos vehiculos (desde un doc.txt) y el usuario las puede consultar a traves de una interfaz vb (DLL) o en C directamente.

Mi problema es que si debugo puedo comprobar como mis datos se cargan correctamente, los datos son de tres tipos int, float y string.

El problema aparece al consultar mis datos por pantalla. Hay dos vehiculos que en vez de retornar los valores int (fecha_construccion) me sale por pantalla un valor arbitrario.

Si lo ejecuto el programa en la version DLL los datos que fallan son en varios vehiculos, no como en C, eso si solo fallan valores declarados integer en C y que los manejo como tipo single en visual.

La duda es por que al debugar si parece que el programa se ejecute sin problemas, en el momento de ejecutar el programa falla?

Es un error muy esquivo!! Con anterioridad tuve problemas al leer strings mezclados con numeros, si declaraba un valor string con un espacio de memoria muy grande (ej, cadena[30]) y luego leia pocas letras, a veces la cadena se llevaba parte del valor numerico que habia despues de esta: no paraba de leer al llegar ' ' a un espacio en blanco.
No se si el error puede ser algo asi.

Un trozo de la funcion lee datos, las variables son las que corresponden en cada caso float, int...

in = fopen("vehiculos.txt", "r");
if (in == NULL)
return 0;
else
{
cont=0;
while (!feof(in))
{
fscanf(in,"%s", m);
v.pon_marca ( m);
fscanf(in," %s", n);
v.pon_modelo (n);
fscanf(in," %d", &a);
v.pon_anho ( a);
fscanf (in," %d", &b);
v.pon_peso ( b);
fscanf (in," %d", &c);
v.pon_cilindrada ( c);
fscanf (in," %f", & f);

S http://foro.webdearde.com/posting.php?mode=post&f=16&sid=eb4f8dd8841fff4a0167c13dc4cf6305# i" onclick="window.open(this.href);return false; no soy capaz de hacer que funcione un scanf no se que programa puedo hacer que sirva de algo!

Os agradezco cualquier comentario que podais hacerme!

Gracias de antemano,

Responder
21 respuestas
oriol
Respuestas: 18
Topic starter
(@oriol)
Active Member
Registrado: hace 13 años

Hola Volcano!

La verdad es que no se que es el IDE(!?).
Madre mia estoy hecho un pardillo total de la programacion!

Tengo el microsoft visual C++ 6.0 que me dieron en la uni.

Aun asi creo que el problema no tiene que ver con el debugger.

Si yo ejecuto el programa se me queda el formulario de C en negro y no pasa nada, como si hubiera forzado un bucle infinito.
_) En mi void main cargo los datos y tiene que aprarecer un mensaje si la funcion retorna tal... se ha leido todo OK, si no pues: no se encuentra el doc.txt
_) El programa se queda colgado al cargar los datos no me retorna ningun valor al entrar en la funcion leodatos. Asi que debugo para ver en que linea de la funcion leo datos hay algun problema.
El resultado es que con el primer getline dejo de poder avanzar la flecha del debugger.

No me sale ningun mensaje de error que me pueda orientar sobre que tipo de fallo genero.

Si quieres te envio el programa en un ZIP y tu cuando tengas un rato y que no te moleste le echas un vistazo, a mi no se me ocurre que cosa probar?

Gracias por tu ayuda Volcano!!

Oriol

Oriol

Responder
oriol
Respuestas: 18
Topic starter
(@oriol)
Active Member
Registrado: hace 13 años

mmmmm,

creo que getline solo se puede usar con cin y para leer docs como hace volcano f.getline.
Quiza el error que me ocurre a mi sea por querer usar getline con un scanf.
Como el programa compilaba pensaba que debia ser correcta la ortografia.

Voy a probar!!!!!!!!!!

Responder
volcano
Respuestas: 51
(@volcano)
Trusted Member
Registrado: hace 15 años

Buenas noches. He cogido tu proyecto y lo estoy compilando en Eclipse.
Para empezar en la funcion que lees los datos del fichero, entra en un bucle infinito cuando lo ejecutas, porque, cuando compilas y enlazas el programa (esto lo hace automatico el eclipse), te crea el ejecutable en un lugar distinto a donde tienes tu fichero txt de vehiculos. Lo copio lo pego en el lugar donde esta el ejecutable, y ya no entra en bucle infinito. Lo unico que no muestra nada la consola. Voy a seguir depurando tu codigo a ver si lo puedo resolver. No he podido ponerme antes con el.

Responder
volcano
Respuestas: 51
(@volcano)
Trusted Member
Registrado: hace 15 años

Bueno, acabo de detectar un error. Te falta hacer un cin.getline, entre año y peso. Por eso se le iba la pinza. En realidad tienes que leer doce campos del fichero, y leias 11. Por eso cascaba.

He estado investigando, y una posible solucion la tienes en hacer un fscanf(); y leer de golpe los 12 datos, pero tengo que probarla.

Responder
oriol
Respuestas: 18
Topic starter
(@oriol)
Active Member
Registrado: hace 13 años

Hola Volcano!

Gracias de verdad por tu tiempo, estoy aprendiendo mucho!

Casi no estaba acostumbrado a cosas que se suponen basicas como consultar librerias y probar funciones nuevas. Pensaba que las funciones que me habian enseñado en clase eran las mejores y que no habia que buscar mas alla.

Oriol

Responder
Página 4 / 5
Compartir: