Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    5

    [C] Problema ritorno putatore da funzione

    Ciao a tutti, sono nuovo e spero che mi aiutate a trovare il problema!
    Sto impazzando dietro a questo problema, io passo un BST alla funzione la quale deve trovarmi il nodo che contiene una chiava, il problema è che quando trova il nodo mi restitusice il nodo a NULL anche se appena prima del retrun la variabile Tmp di tipo NODO contiene esattamente l'indirizzo che contiene la chiave.
    Ciò che non capisco è perche ritorna NULL al posto del valore trovato!
    Cosa ho sbagliato ??? perche non mi fa ritornare il puntatore a cui sono arrivato ???
    Grazie mille in anticipo! ciao

    codice:
    NODE *BstVisitInOrder(BST *B,char *cmp)
    {
        NODE *K;
    
        K = _BstVisitInOrder(B->root,cmp);
        printf("%s\n",K->info);
        return (K);
    }
    
    NODE *_BstVisitInOrder(NODE *Tmp,char *cmp)
    {
        if(Tmp==0)
            return NULL;
    
        if(strcmp(Tmp->info,cmp)==0)
            return (Tmp);
    
        _BstVisitInOrder(Tmp->sx,cmp);
        printf("%s\n",Tmp->info);
        _BstVisitInOrder(Tmp->dx,cmp);
    }

  2. #2
    Perché al termine di _BstVisitInOrder non hai inserito
    codice:
    return Tmp;
    (e tra l'altro un compilatore serio te lo dovrebbe segnalare almeno come warning).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    5
    grazie mille!!!!!!!!!!!!! adesso fa proprio quello che volevo...
    Ma se non è troppo lungo mi potresti spiegare perche devo mettere anche il return in fondo oltre che sotto l'if ?
    grazie mille ancora!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Originariamente inviato da etza
    grazie mille!!!!!!!!!!!!! adesso fa proprio quello che volevo...
    Ma se non è troppo lungo mi potresti spiegare perche devo mettere anche il return in fondo oltre che sotto l'if ?
    Fatti la domanda ... cosa restituiva la funzione arrivata dopo la if ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    5
    Non lo so, secondo me dopo l'if che c'è il retrun Tmp dovrebbe ritornare il puntatore Tmp, ma a quanto sembra non fa cosi, tra l'altra nn funziona ancora come voglio perche mi ritorna il valore che gli ho passato...anche se come al solito sotto l'if punta al NODO con chiava desiderata

  6. #6
    Originariamente inviato da etza
    Non lo so, secondo me dopo l'if che c'è il retrun Tmp dovrebbe ritornare il puntatore Tmp, ma a quanto sembra non fa cosi
    Se non gli dici di farlo lui come fa a sapere che lo deve fare?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    5
    Scusa eh, ma io facendo cosi quando trova la chiave cmp, in Tmp, c'è il NODO che contiene la chiave, se gli dico return Tmp, non è li che gli dico di farmi tornare il NODO che contiene la chiave??
    Scritto come con l'aggiunta del return Tmp in fondo mi fa tornare il NODO che gli ho passato e non quello che ha trovato comparando le chiavi, è questo che non capisco, io voglio che ritorni il puntatore al NODO che contiene la chiave.
    intanto ti ringrazio!
    Questo è il "nuovo" codice
    codice:
    NODE *_BstVisitInOrder(NODE *Tmp,char *cmp)
    {
        if(Tmp==0)
            return NULL;
    
        if(strcmp(Tmp->info,cmp)==0)
            return Tmp;
    
        _BstVisitInOrder(Tmp->sx,cmp);
    
        _BstVisitInOrder(Tmp->dx,cmp);
    
    
        return Tmp;
    }

  8. #8
    Ma quindi devi restituire il nodo restituito dalla prima o dalla seconda _BstVisitInOrder?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    5
    A me serve che la seconda funzione restituisca alla prima il NODO che contiene la chiave, ma se la lascio cosi mi restituisce il NODO che gli passo, che sarebbe la radice, poi debuggando vedo che scorre l'albero fino a trovare la key quando la trova va nell'if

    codice:
        if(strcmp(Tmp->info,cmp)==0)
            return (Tmp);
    ha l'indirizzo giusto ma mi ritorna il nodo che gli ho passato, è questo che non capisco.
    Grazie mille per aiuto!

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.