Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178

    [C] Interruzione programma dopo corretta compilazione

    Ciao a tutti,
    ho una serie di funzioni, alcune ricorsive altre no, che agiscono su un albero. Se eseguite singolarmente producono l'effetto voluto, se eseguite in sequenza interrompono l'esecuzione del programma (comunque correttamente compilato).
    Non riesco a capire cosa succeda..
    Grazie (se serve codice ne posto ma è un po' lunghino)
    Buji

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: [C] Interruzione programma dopo corretta compilazione

    Originariamente inviato da buji
    (se serve codice ne posto ma è un po' lunghino)
    E che risposta si potrebbe dare senza il codice?

  3. #3
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    Questa è una funzione che mi sta dando più interruzioni
    codice:
    lista_elem *crea_lista(nodo_albero nodo, char direzione) {
           void visita_perlista(nodo_albero nodoini, lista_elem *listaini);    
           lista_elem *ptr_lista;
           lista_elem lista;
           nodo_albero *next_nodo;
           ptr_lista = &lista;
           if (nodo == NULL)
              return NULL;
           lista = (lista_elem)malloc(sizeof(struct lista));
           lista->ptr_nodo=nodo;
           lista->next = NULL;
    
           if (direzione == 'p') {
                visita_perlista(nodo->left, ptr_lista);
           }
           else if (direzione == 's'){
               visita_perlista(nodo->right, ptr_lista);
           }
           return ptr_lista;
    }
    
    void visita_perlista(nodo_albero nodoini, lista_elem *listaini) {
         lista_elem temp;
         if (nodoini != NULL) {
              temp = (lista_elem)malloc(sizeof(struct lista));
              if (temp != NULL) {
                 (*listaini)->next = temp;
                 temp->ptr_nodo = nodoini;
                 visita_perlista(nodoini->left,&temp);
                 visita_perlista(nodoini->right,&temp);
              }
         }
    }
    In cui nodo del primo parametro è la radice di un albero binario creato e manipolato da altre funzioni.
    Buji

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma cosa vuol dire "piu' interruzioni"?

    Devi essere piu' preciso ... hai fatto un po' di debug?

  5. #5
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    Effettivamente più interruzioni vuol dire poco.
    Questa funzione, eseguita singolarmente sull'albero appena creato funzione, se eseguita dopo una funzione di esplorazione dell'albero (che apparentemente funziona correttamente), interrompe l'esecuzione del programma.
    Il mini debug che ho fatto mi ha fatto notare che arriva fino alla prima chiamata della funzione visita_perlista.
    Buji

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quando dici "interrompe l'esecuzione del programma" hai un errore e un messaggio da parte del programma? E se e' cosi', dacci i dettagli ...

  7. #7
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    La classica maschera di windows "Si è verificato un errore" ecc. ecc.
    Più la richiesta di segnalazione a Microsoft
    Buji

  8. #8
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    Debuggando con dev c mi dice che il "programma ha causato una violazione di accesso (errore di segmentazione)"
    Buji

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da buji
    La classica maschera di windows "Si è verificato un errore" ecc. ecc.
    Più la richiesta di segnalazione a Microsoft
    Sì ... ma la "classica" maschera di windows significa qualcosa ... le informazioni che sono presenti in quel messaggio sono importanti e dovresti riportarle. Inoltre, dovresti dire quale riga sta eseguendo quando si verifica ...

    E poi, per non "impazzire" con il codice, e' opportuno che i nomi delle strutture, tipi di dati e variaibili non siano confusi tra loro ...

    In particolare, quando scrivi

    lista_elem lista;

    se non ricordo male, questa dovrebbe essere gia' un puntatore ... e allora perche' scrivi

    ptr_lista = &lista;

    ? E perche' utilizzi per il nome della variabile, quello della struttura?

    Insomma, rivedi linea per linea e magari commentala, dando dei nomi *univoci* a strutture, dati e puntatori cosi' come ti avevo suggerito.

    Anche perche' devcpp ammette certe denominazioni molto discutibili ma altri compilatori no ...

    In particolare, nomi di strutture e tipi di dati puntatori a tali strutture DEVONO avere nomi diversi ...

  10. #10
    Utente di HTML.it L'avatar di buji
    Registrato dal
    Nov 2002
    Messaggi
    178
    Originariamente inviato da oregon
    Sì ... ma la "classica" maschera di windows significa qualcosa ... le informazioni che sono presenti in quel messaggio sono importanti e dovresti riportarle. Inoltre, dovresti dire quale riga sta eseguendo quando si verifica ...
    ...
    La maschera di errore non fornisce alcuna informazione, è quella di segnalazione a microsoft e viene aperta alla prima chiamata della funzione visita_perlista.
    Io nel frattempo sto seguendo il tuo suggerimento sui nomi delle variabili.

    Grazie
    Buji

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.