PDA

Visualizza la versione completa : c++ ritorno di una un singolo elemento dell array


tentaki
26-01-2015, 15:22
applicazione* store::getapp(int i){
if(app[i]!=0){
applicazione *a=app[i];
return a;
}


}

perche invece di ritornare il singolo elemento dell array app mi ritorna sempre il primo elemento??
sono disperato

shodan
26-01-2015, 18:22
applicazione* store::getapp(int i){
if(app[i]!=0){
applicazione *a=app[i];
return a;
}
}

Anche un puntatore NULL è un puntatore valido per la restituzione. Il test


if(app[i]!=0)

dovrebbe essere fatto dal chiamante. Nel corpo della funzione dovresti invece testare se la i è compresa tra 0 e la dimensione massima data ad app
Esempio:


applicazione* store::getapp(int i){
if(i>=0 && i < max_app){ // o quel che è
applicazione *a=app[i];
return a;
}
return NULL; // nullptr in C++ 11
}

applicazione* tapp;
...
tapp = store.getapp(1);
if (tapp != NULL /* nullptr */ ) {
// usa tapp.
}

tentaki
28-01-2015, 14:39
hai ragione , e sono delle buone osservazione, pero se io richiamo la funzione dopo la prima volta invece di ritornare il valore successivo alla seconda o terza posizione e cosi via mi ritorna sempre il primo valore di app... spero che si sia capito :D

shodan
28-01-2015, 17:50
Quel frammento di codice non può avere il comportamento di cui ti lamenti, a meno di non passare sempre lo stesso valore di i.

tentaki
28-01-2015, 18:25
Quel frammento di codice non può avere il comportamento di cui ti lamenti, a meno di non passare sempre lo stesso valore di i.

ma intanto nn funziona come dovrebbe...

MItaly
28-01-2015, 19:21
L'unica possibilità che vedo, nel caso dello snippet che hai postato tu, è che in seguito alla prima chiamata venga chiamato su un elemento che è NULL, in tal caso vai in undefined behavior dato che non hai messo la return in quel percorso di codice (per cui potrebbe essere rimasto sullo stack l'ultimo valore restituito o in un registro il valore dell'if). Nel caso della versione di shodan, non è possibile che quel codice di suo ti dia quel problema, per cui probabilmente l'errore sta nel codice al contorno. Posta un SSCCE (http://sscce.org/) e ne riparliamo.

shodan
28-01-2015, 19:22
[Edit per doppia risposta]

@MItaly
Ma dove le trovi ste sigle? :D

MItaly
28-01-2015, 20:15
L'SSCCE va fortissimo su StackOverflow :D

Loading