Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c] Problema return

  1. #1

    [c] Problema return

    Salve... Ho sviluppato il seguente codice.
    codice:
    key* find_key_by_format(const registry* reg, format f){  	
    // Dichiarazione delle variabili 		
    key* cont_key[MAX_ENTIRES]; 		
    int contatore = 0; 		
    int contatore_key;   		
    // Ricerca key 		
    for (contatore = 0; contatore < MAX_ENTIRES ; contatore++) { 
     			if(reg->entires[contatore]->type==f){ 	
    			cont_key[contatore_key]=reg->entires[contatore];  			
    }     		
    }  		
    return cont_key;    
    }
    Durante la compilazione mi viene dato il senguente errore sul return della funzione

    Errore:Multiple markers at this line
    - return from incompatible pointer type [enabled by
    default]
    - function returns address of local variable [enabled by
    default]

    Sinceramente non sto riusciendo a capire cosa ci sia di sbagliato. Aspetto il parare di gente che sicuramente ne sa piu di me

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Credo che tu volessi fare quello che posto qui di seguito.

    Ho riformattato il codice (la formattazione non è un optional) e i nomi delle variabili contatore.

    codice:
    key *find_key_by_format(const registry *reg, format f)
    {
        key *cont_key = NULL;	
        int i;   		
    
        for (i = 0; i < MAX_ENTIRES; i++)
            if (reg->entires[i]->type == f) {
                cont_key = reg->entires[i];
                break;
            }
    
        return cont_key;    
    }
    P.S non è che volevi scrivere ENTRIES e non ENTIRES ?

  3. #3
    la funzione key* find_key_by_format(const registry* reg, format f);
    deve restituire un array con tutte le chiavi nel registro di tipo f.


    l'output deve essere un vettore contenente tutte le chiavi di formato f trovate.
    Con la soluzione che mi proponi in output ricevo solo il primo valore che trovo.



    Comunque per quanto riguarda la formattazione non sono molto pratico del forum e quando ho messo il codice mi si e' un po ingarbugliato.


    Ps no mi e' stato chiesto di scrivere entires e non entries

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    ah beh, diciamo che la tua funzione non si avvicinava neanche lontanamente a quello che volevi fare.
    Si avviciniava con molti errori all'idea di ritornare 1 entry, e così ho fatto.

  5. #5
    Quindi come dovrei fare? Mi basta una spiegazione non serve per forza il codice

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    allora... iniziamo dal risultato.

    L'array di risultati che ritorni come fai a sapere che sarà grande MAX_ENTIRES?
    Conterrà sicuramente meno risultati di MAX_ENTIRES, quindi:

    1) o fai 2 cicli for in cui nel primo ti calcoli solo il numero di risultati e usi quello per la malloc successiva
    2) o fai 1 ciclo for e usi realloc
    3) o ritorni una lista concatenata
    4) o ritorni un array di MAX_ENTIRES e tramite un puntatore tra i parametri ritorni quante posizioni hai riempito,
    ma è proprio bruttino.

    P.S. anche per i punti (1) e (2) dovrai comunque ritornare la lunghezza dell'array tramite un puntatore nei
    parametri, altrimenti il chiamante la funzione non può sapere quanto è lungo l'array

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.