Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

No doy con el error... Imposible

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: No doy con el error... Imposible Responder citando

uenas..

LLevo varios dias intentando encontrar el porque de un error (el valor de una variable varia al inicializar una clase sin razon aparente).... y me es imposible ... He reducido a la minima expresion el codigo y que siga dando el problema para hacerlo mas comprensible.
Cita:
Código:
Class TClase1
{
private :
TStringList *Lista;
public :
TClase1();
{
Lista = new TStringList;
}
}


Class TClase2 (#Include "Clase1.h")
{
private:
TClase1 ClaseHija;
public:
TClase2()
{
struct ffblk ffblk; //Obiamente en el programa original se lee un archivo en esta version reducida solo incluyo esta linea
suficiente para hacer saltar el error
}

}

class TDatos
{
private:

struct SRegistro
{
bool a;
bool b;
unsigned short Num;
};

typedef SRegistro TRegistro

struct SArchivo
{
char Nombre [16];
TRegistro ListaRegistros [100];
};


typedef SArchivo TArchivo;

public:

typedef SArchivo TArch;
TDatos()
{
}

TDatos::Archivo *TDatos::LeerDatos()
{
TDatos A;
A.ListaRegistro[12].a = true
A.ListaRegistro[12].b = false;
A.ListaRegistro[12].Num = 0;

return &A
}


PROGRAMA PRINCIPAL

#Include Clase2
#Include Datos
......
.....
TDatos *BDatos = new TDatos();
TDatos::TArch LeLosDatos;
LeLosDatos = BDatos->LeerDatos();

TClase2 *ClaseSegunda = new TClase2()
Una vez Leidos, los datos obtenidos son los correctos

LeLosDatos.ListaRegistro[12].a = true
LeLosDatos.ListaRegistro[12].b = false;
LeLosDatos.ListaRegistro[12].Num = 0;


El problema surge cuando inicializo ClaseSegunda.. los Valores de LeLosDatos se modifican sin razon aparente.

He comprobado que:

- Si Elimino de Clase 1 el TStringList *Lista NO DA ERROR
- Si elimino de Clase2 en el Constructor struct ffblk ffblk NO DA ERROR
- Si en la estructura struct SArchivo de TDatos sustituyo TRegistro ListaRegistros [100];
por TRegistro ListaRegistros; NO DA ERROR

Supongo que es error al declarar punteros o estructuras que solapan posiciones de memoria pero no lo veo NECESITO AYUDA..

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenas...

Para facilitar la comprension del problema , pongo la direccion web de donde descargar el progrma ejecutable (Uloerror) donde se puede apreciar como se produce el error.

https://app.box.com/s/bni8bvn20e4zdzgz67f4
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Dado que el ejecutable anterior puede dar problemas por incompatibilidades con paquetes de componentes instalados, mando la direccion de donde bajar el ejecutable limpio de polvo y paja .... compilado sin ningun paquete adicional...

https://app.box.com/s/uva20447qs27q9ts5o1o
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Vi antes tu tema en CD así que te contesté allí.

Básicamente tu problema está en que devuelves un puntero a una variable local de la función LeerDatos(), el resultado es impredecible y cambiante.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias otra vez Crack...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.