Ho un incarico che richiede l'implementazione di una classe di elenchi doppiamente collegata. Per qualche motivo hanno definito il nodo struct
come segue:Doppi elenchi collegati in C++
struct node {
node *next;
node *prev;
T *o;
};
Mi sembra che sarebbe stato molto più facile di scrivere la classe se la 'data' membro struct non fosse un puntatore. Inutile dire che non posso cambiarlo, quindi dovrò solo aggirarlo. Ho provato l'attuazione del metodo che aggiunge un elemento all'inizio della lista come segue:
template <typename T>
void Dlist<T>::insertFront(T *o) {
node *np = new node;
T val = *o;
np->o = &val;
np->prev = NULL;
np->next = first;
if (!isEmpty()) {
first->prev = np;
} else {
last = np;
}
first = np;
}
durante l'utilizzo di ddd per eseguire il debug ho capito che tutto funziona bene la prima volta che si inserisce un numero, ma la seconda volta tutto diventa avvitato poiché non appena si imposta 'val' sul nuovo elemento esso "sovrascrive" il primo poiché è stato utilizzato l'indirizzo di memoria di val. Ho provato a fare altre cose come invece di avere la variabile 'val' facendo quanto segue:
T *valp = new T;
T val;
valp = &val;
val = *o;
np->o = valp
Anche questo non sembra funzionare. Penso che sia perché è solo una forma più complicata di ciò che ho fatto sopra solo con una perdita di memoria aggiuntiva :)
Qualsiasi idea/puntatore nella giusta direzione sarebbe ottima.
+1 per il disclaimer compiti onorevole. –
Dai uno sguardo a questo, la prima risposta può aiutarti a capire il problema: http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-can-be -dato-a-superare – Dan
Quando hai la possibilità di dare un'occhiata anche a questo: http://stackoverflow.com/questions/599308/proper-stack-and-heap-usage-in-c - differenza tra stack e allocazione dell'heap. – Dan