Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [C]Problema con funzione

    Potete spiegarmi da cosa dipende questo fatto:
    Durante l'esecuzione di un programma quando arriva ad eseguire una funzione il programma finisce senza dare spiegazioni, si chiude la finestra. L'ho provato debuggandolo e ho visto che proprio quando arriva alla riga in cui comincia la funzione si chiude anche il debug stesso. Da cosa può dipendere? Grazie.

  2. #2
    Da cosa può dipendere?
    A Babbo Natale ho chiesto la sfera di cristallo proprio per rispondere a domande come la tua... Aspettando che arrivi puoi mostrarci il codice?
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  3. #3
    Scusa. Siccome il codice è su più moduli e molto lunghi ho esitato a postare il codice. Volevo informarmi se dipende da qualcosa in particolare al di la dell'algoritmo della funzione. Comunque se proprio volete lo posto.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Mi sa che e' proprio quella chiamata che devi mostrare, non tutto il codice ... ovviamente dovrai anche dire quali sono i parametri che passi e di quale tipo ... e soprattutto, cosa ci fa la funzione con i parametri passati ...

    Un algoritmo sbagliato semplicemente puo' fornire risultati sbagliati, non fa chiudere il programma senza motivo ... a quello ci pensano i "cattivi" puntatori ...

    @pallinopinco ... se Babbo Natale ne ha 2 di sfere di cristallo, fammene arrivare una anche a me ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Comunque se proprio volete lo posto.
    Non è questione di volerlo o non volerlo, senza vedere cosa hai scritto dovremmo lanciarci in una serie di ipotesi più o meno plausibili. Per non perdere tempo e non far perdere tempo al prossimo è sempre opportuno formulare le domande nel modo più chiaro e completo possibile.

    Posta la funzione incriminata ed il codice nel quale la richiami.

    @pallinopinco ... se Babbo Natale ne ha 2 di sfere di cristallo, fammene arrivare una anche a me ...
    Ti cedo volentieri una copia di Crystal Ball 2005 Express, quest'anno sono stato buono quindi mi aspetto la versione aggiornata!
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  6. #6
    La funzione ritorna 0 o 1 (false o true). E non riceve niente in input.
    è la funzione E()
    codice:
    boolean E(){
        boolean allok;
        allok=T();
        while(allok && (sy==PLUS)||(sy==MINUS)){
            insymbol();
            allok=T();
        }
        return allok;
    }
    
    boolean statement (){
        if (sy==IDENT){
            insymbol(); 
            if(sy==BECOMES){
                insymbol();
                if (E())
                return TRUE;
            }
        }
    }
    La funzione viene chiamata in statement, sono stati definiti il tipo boolean e
    symbol che può assumere vari valori in base a caratteri che incontra. Spero possa essere utile

  7. #7
    Dal codice che hai inviato è impossibile diagnosticare il tuo problema, anche se si intravede, con l'uso che fai della "sy", un probabile sconsiderato utilizzo di variabili globali.

    Non riesci a mettere un breakpoint subito all'inizio della funzione incriminata "E"?
    Che fanno le funzioni "insymbol" e "T"?

  8. #8
    cosa vuol dire uso sconsiderato?

    Ho messo il breakpoint proprio all'inizio della funzione E() e succede proprio quello che detto prima cioè si blocca l'esecuzione senza motivo o comunque non mi viene comunicato.

    La funzione insymbol assegna un valore a sy in base a caratteri incontrati in un file, mentre T serve per trovare se una serie di simboli è un termine di un espressione. (E sta per espressione e T sta per termine)....

    quindi?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    "Sconsiderato", penso, nel senso di eccessivo.

    Dato che l'uso di variabili globali e' considerato sintomo di "cattiva programmazione" (per dei motivi su cui, per ora, e' inutile soffermarci) probabilmente averne usate parecchie e' da ritenersi molto dannoso.

    Per venire al tuo problema specifico, come ti e' stato detto prima, devi mostrare la funzione T() e la insymbol(), perche' il problema e', molto probabilmente, in queste funzioni ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    codice:
    boolean T(){
        boolean a2;
        a2=F();
        while (a2 && (sy=DIVSY)||(sy=MODSY)||(sy=TIMES)){
            insymbol();
            a2=F();
        }
        return a2;
    }
    
    boolean F(){
        switch (sy){
            case INTCON:
                insymbol();
                return TRUE;
                break;
            case IDENT :
                insymbol();
                return TRUE;
                break;
            case LPAR:
                insymbol();
                if (E()){
                    if(sy==RPAR)
                    insymbol();
                    return TRUE;
                }
        }
    }
    la insymbol non la metto perchè al suo interno contiene altre funzioni che contengono a loro volta altre funzioni, la lista sarebbe troppo lunga.Comunque dopo averla testata da sola funziona in tutti i modi: fa quello che deve fare senza problemi.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.