27/03/14 20:30
bububs
Riassumo semplicemente il mio problema.
c'è un classe i cui unici parametri privati sono un array dinamico di stringhe (string) e una dimensiona D.
Ho un metodo pubblico ADD (string X) che aggiunge una stringa all'array.. come? aumentando (dinamicamente) la dimensione di uno (ovviamente). Il fatto è che mi si crasha il programma in runtime e non capisco il perché...
Faccio un esempio pratico per farvi capire meglio.
class classe{
private:
string* V;
int d;
public:
classe(){
V = new string[10];
}
void add(string x){
if( !contains(x) ){
string* tmp = new string[d + 1];
for(int i = 0; i < d; i++)
tmp[i] = V[i];
delete[] V;
V = tmp;
d++;
}
}
};
int main(){
classe cl;
cl.add("ciao");
}
Ultima modifica effettuata da bububs 27/03/14 20:31
aaa
27/03/14 20:56
nessuno
Prima di tutto lo fai per completare un esercizio/compito o perché ti serve un programma del genere?
Nel secondo caso, non ha senso usare un array di string ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
27/03/14 21:03
Poggi Marco
Ciao!
Il programma non funziona perchè non inizializzi d ( il registro della dimensione del vettore ) nel costruttore della classe.
Dovresti impostare un' altra variabile per il conteggio degli elementi effettivamente presenti nel vettore.
A mio parere non è efficiente riallaccare l' intero vettore ad ogni chiamata del metodo ADD( ). Controlla se nel vettore c'è spazio sufficiente prima di aumentare la dimensione, e nel caso sia necessario, raddoppia la capacità.
aaa
28/03/14 9:40
nessuno
Infatti ti avevo proprio chiesto se era per un compito.
Per la questione di d, forse non hai capito. Tu non dai mai un valore iniziale a d e questa è la causa del tuo errore.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
28/03/14 13:26
Poggi Marco
Postato originariamente da bububs:Intanto grazie a entrambi per l'interessamento al mio problema. Inizio a rispondervi uno alla volta.
Nessuno, so che vi sono numerose varianti molto piu funzionali di questa ma sono costretto ad usarla perche è un esercizio, molto piu piu elaborato, e richiede tutto cio'.
Detto cio' mettiamo il caso che aggiunga una funzione "allarga" come mi ha suggerito Marco. Come sarebbe gestita? Per il fatto della dimensione il parametro D è richiesto dal programma e non posso farne a meno.. purtroppo.
Come ha suggerito nessuno, nel costruttore devi necessariamente inizializzare d, inoltre ti serve una variabile per il conteggio degli elementi effettivamente registrati nel vettore.
Esempio:
class classe{
private:
string* V;
int d, elementi;
public:
classe(){
d=10; // Assegno una dimensione iniziale al vettore
elementi=0; // Indice degli elementi presenti
V = new string[d];
}
void add(string x){
if( elementi>=d ){
allarga() // Richiamo la funzione per ridimensionare il vettore.
}
v[elementi]=x;
elementi++; // Aggiorno l'indice degli elementi registrati.
}
};
Ultima modifica effettuata da Poggi Marco 28/03/14 13:30
aaa