| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Mie 31 Jul, 2013 8:52 pm Asunto: No doy con el error... Imposible |
|
|
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 01 Ago, 2013 10:07 am Asunto: |
|
|
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Vie 02 Ago, 2013 2:49 pm Asunto: |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 02 Ago, 2013 6:54 pm Asunto: |
|
|
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Sab 03 Ago, 2013 9:28 am Asunto: |
|
|
| Gracias otra vez Crack... |
|
| Volver arriba |
|
 |
|