[C con Clase] Problema con clase

Steven Davidson srd4121 en njit.edu
Jue Jun 3 15:55:58 CEST 2010


Hola Agustín,

Al parecer nadie ha contestado a este mensaje. A ver si puedo ayudar.

Agustín Cota Reguero wrote:
> Hola a todos. A ver si alguno puede echarme una mano con el siguiente
> problemilla. He creado dos clases DifracData y Difractograma en las 
> cuales se han de guardar los elementos de un fichero que tiene pares
> de puntos de información. He creado algunas funciones para ellas y me
> encuentro con el siguiente problema. Cuado cargo la información del 
> fichero en la clase siempre considera como si estuviese vacia y no lo
> entiendo. A ver si alguno me puede dar una idea de por que.
> 

En 'Difractograma::CargarDatos()', invocas 
'Difractograma::InsertarAlFinal()'. Aquí, invocas 
'Difractograma::Vacia()' la cual involucra el valor del puntero 
'Difractograma::ActualDato'. El problema radica en que el constructor de 
'Difractograma' no inicializa ni asigna un valor inicial a este puntero 
'ActualDato'. Escribes:

class Difractograma
{
private:
   int nDataElements;
   DifracData* ActualDato;

public:
   Difractograma( int nelement = 0 ) : nDataElements(nelement) {}
   ...
};

Por lo tanto, al instanciar un objeto de esta clase, su miembro 
'ActualDato' no tiene un valor inicial, lo cual implica que contiene 
basura. Esto es muy peligroso, porque el comportamiento del objeto puede 
basarse en una dirección de memoria equivocada.

También veo que modificas 'ActualDato'. En general, esto no es 
recomendable. Este puntero es el comienzo de la lista y por tanto no 
debe modificarse. Si quieres mantener un puntero a un nodo "actual", 
entonces crea otro puntero y modifícalo, para que recorra la lista.

Por último, debes implementar el destructor, para que vaya liberando 
todos los nodos previamente creados y así libera la memoria creada.


Espero que esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase