Buongiorno a tutti
sono nuovo nel forum.
Sto imparando per puro divertimento C++ da solo da pochi giorni (vengo da Java), e mi sto scontrando con i puntatori
Il mio problema: voglio stampare a video una tabella di persone (nome, cognome, indirizzo, ecc.).
La classe che deve raccogliere i dati e passarli alla tabella, ha un ciclo del tipo:
for (int i=0; i<s; i++) {
Person *p = pVector->at(i);
string *str = new string[7];
str[0] = p->getFirst();
str[1] = p->getName();
str[2] = p->getNumber();
str[3] = p->getMail();
str[4] = p->getStreet();
str[5] = p->getPlz();
str[6] = p->getCity();
pTable->addRow(str);
}
dove
addRow è così definito:
void Table::addRow(string *str) {
vct.push_back(str);
}
e
vct è un vettore:
std::vector <std::string *> vct;
Il tutto funziona, ma ho visto che mi rimangono memory leaks. Allora, nel distruttore della classe Table ho scritto:
for (int i=0; i<vct.size(); i++) {
delete [] vct[i];
}
Il tutto compila, ma quando il distruttore viene chiamato, ottengo un errore:
Speicherzugriffsfehler (Speicherabzug geschrieben) credo che sia
segmentation fault in inglese.
Il mio ragionamento: se nel vettore ho dei puntatori ad array di stringhe, anche se scrivere
string *str = new string[7];
in un loop non è bello, prendendo gli elementi del vettore
e passandoli al delete[] dovrebbero essere cancellati.
La mia domanda: dove sbaglio (concettualmente)?
Grazie mille e un salutone a tutto il forum
Eugenio