perche invece di ritornare il singolo elemento dell array app mi ritorna sempre il primo elemento??codice:applicazione* store::getapp(int i){ if(app[i]!=0){ applicazione *a=app[i]; return a; } }
sono disperato
perche invece di ritornare il singolo elemento dell array app mi ritorna sempre il primo elemento??codice:applicazione* store::getapp(int i){ if(app[i]!=0){ applicazione *a=app[i]; return a; } }
sono disperato
Anche un puntatore NULL è un puntatore valido per la restituzione. Il testcodice:applicazione* store::getapp(int i){ if(app[i]!=0){ applicazione *a=app[i]; return a; } }
dovrebbe essere fatto dal chiamante. Nel corpo della funzione dovresti invece testare se la i è compresa tra 0 e la dimensione massima data ad appcodice:if(app[i]!=0)
Esempio:
codice: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. }
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
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
Ultima modifica di tentaki; 28-01-2015 a 15:42
Quel frammento di codice non può avere il comportamento di cui ti lamenti, a meno di non passare sempre lo stesso valore di i.
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
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 e ne riparliamo.
Amaro C++, il gusto pieno dell'undefined behavior.
[Edit per doppia risposta]
@MItaly
Ma dove le trovi ste sigle?
Ultima modifica di shodan; 28-01-2015 a 20:24
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
L'SSCCE va fortissimo su StackOverflow
Amaro C++, il gusto pieno dell'undefined behavior.