ma come codice è decente o pessimo?
Sicuro di volerlo sapere? Per come la vedo io stai solo rendendo complicato qualcosa di molto semplice.
1) ma mica si perdono i dati?
2) scusa ma una volta allocata la memoria non dovrebbe restare a disposizione finchè non si libera?
3) come mai un comportamento cosi strambo?
1) finché resti all'interno della funzione, no. Appena ne esci, si.
2) la memoria resta allocata, ma quel che fai all'interno della funzione è perso appena ne esci.
3)
perché stai lavorando su una copia del puntatore.
int Bianca(struct attributo *numero,int &inbyte,int &opzione)
numero è una copia del puntatore che passi, non è il puntatore che passi.
C'era il motivo per cui avevo scritto:
int Bianca(struct attributo *&numero,int &inbyte,int &opzione)
Se non ne sei convinto prova a compilare e far girare questo:
struct attributo {
int attribbuto;
char* valore;
};
void Test1(struct attributo* p) {
p = new attributo;
p->attribbuto = 10;
}
void Test2(struct attributo*& p) {
p = new attributo;
p->attribbuto = 10;
}
int main(void) {
attributo* attr1 = nullptr;
attributo* attr2 = nullptr;
Test1(attr1);
Test2(attr2);
cout << (attr1 == nullptr) << endl; // true, 1
cout << (attr2 == nullptr) << endl; // false 0;
delete attr2;
delete attr1;
}
In Test1 allochi memoria che poi sarà persa una volta che la funzione esce, stessa cosa per i vari campi.
In Test2 le modifiche sono trasmesse alla funzione chiamante.