Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    17

    c++ ritorno di una un singolo elemento dell array

    codice:
    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

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    codice:
    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
    codice:
    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:
    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.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    17
    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

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    17
    Quote Originariamente inviata da shodan Visualizza il messaggio
    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...

  6. #6
    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.

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    [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.

  8. #8
    L'SSCCE va fortissimo su StackOverflow
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.