alessandrom
09-02-2012, 14:22
Ciao a tutti, sto implementando un iteratore per un progetto, questo iteratore invece di accedere direttamente al dato restituisce una struct creata al momento con un metodo della classe di riferimento contenente un valore e il dato.
class Classe{
struct struttura{
int key;
int value;
}
class iterator{
struttura *s;
Classe *c;
//...
~iterator(){};
operator ++(){
struttura* tmp=s;
s=c->trovaNext(tmp);
delete tmp;
return *this;
}
};
iterator begin(){
//Creo la struttura s con un metodo che ritorna struttura*
iterator x=iterator(s);
x.setClass(this);
return x;
}
};
Facendo cosė: se l'iteratore non scorre in avanti fino alla fine resta allocata in memoria una struttura, se nel distruttore metto delete, valgrind mi dice che operator++ tenta di accedere a una porzione di memoria non valida.
C'č un altro approccio con cui affrontare il problema? Magari usando delle strutture temporary, non saprei..
class Classe{
struct struttura{
int key;
int value;
}
class iterator{
struttura *s;
Classe *c;
//...
~iterator(){};
operator ++(){
struttura* tmp=s;
s=c->trovaNext(tmp);
delete tmp;
return *this;
}
};
iterator begin(){
//Creo la struttura s con un metodo che ritorna struttura*
iterator x=iterator(s);
x.setClass(this);
return x;
}
};
Facendo cosė: se l'iteratore non scorre in avanti fino alla fine resta allocata in memoria una struttura, se nel distruttore metto delete, valgrind mi dice che operator++ tenta di accedere a una porzione di memoria non valida.
C'č un altro approccio con cui affrontare il problema? Magari usando delle strutture temporary, non saprei..