Errore di segmentazione (core dump creato)

di il
13 risposte

Errore di segmentazione (core dump creato)

Salve a tutti, sono nuovo nel mondo dell'informatica e per questo non riesco a capire perchè quando cerco di eseguire il seguente programma mi dà l'errore "Errore di segmentazione (core dumping creato). Ho provato a rifletterci sopra ma, evidentemente, la mia poca conoscenza mi impedisce di capire qual è il problema. Spero che voi possiate darmi una mano, ecco il codice:
# include <stdio.h>
# include <stdlib.h>

int f1(int a, int b) {
    return f1(20, 10);
}

int f2(int a) {
    int return_value;
    return_value = a * a;
    return return_value;
}

int main(void) {
    {
    printf("%d\t%d\n", f1(1, 2), f2(3));
    printf("%d\t%d\n", f1(4, 5), f2(6));
    }
    return EXIT_SUCCESS;
}

13 Risposte

  • Re: Errore di segmentazione (core dump creato)

    Ciao, capisco che tu abbia iniziato da poco, ma con un po' di furbizia avresti potuto, non dico risolvere, ma almeno isolare il problema.
    Cosa intendo?

    Intendo che questo codice funziona
    # include <stdio.h>
    # include <stdlib.h>
    
    int f1(int a, int b) {
        return f1(20, 10);
    }
    
    int f2(int a) {
        int return_value;
        return_value = a * a;
        return return_value;
    }
    
    int main(void) {
        {
        printf("%d", f2(3));
        }
        return EXIT_SUCCESS;
    }
    e questo no
    # include <stdio.h>
    # include <stdlib.h>
    
    int f1(int a, int b) {
        return f1(20, 10);
    }
    
    int f2(int a) {
        int return_value;
        return_value = a * a;
        return return_value;
    }
    
    int main(void) {
        {
        printf("%d", f1(1, 2));
        }
        return EXIT_SUCCESS;
    }
    Da cui si evince che il problema è la funzione F1().

    A questo punto non dovrebbe essere molto difficile ragionare su una funzione costituita da un'unica e semplice riga di codice.
    Indizi:
    - sai cosa significa passaggio di parametri per copia?
    - quante volte viene richiamata ricorsivamente la funzione F1()?
    - la memoria del PC è infinita?
  • Re: Errore di segmentazione (core dump creato)

    Ciao! Avevo un sospetto che il problema potesse essere la prima funzione infatti...però non capisco cosa dovrei fare.
    Non so cosa sia il passaggio di parametri per copia...quel che non va è la parte in int f 1, non nel main giusto?
  • Re: Errore di segmentazione (core dump creato)

    Ma la "f1" l'hai scritta tu?
  • Re: Errore di segmentazione (core dump creato)

    Lascia stare, per ora, il problema di cosa voglia dire passare i parametri per copia.

    @Nippolo: visto che e' un intero, un intero, un reference o un puntatore allocano piu' o meno lo stesso spazio. Vista la semplicita' del codice, sintomo che l'autore e' prima delle primissime armi, non vale la pena farlo notare.

    Il problema e' in QUESTE righe di codice
    
    int f1(int a, int b) {
        return f1(20, 10);
    }
    
    Domandone:

    1) che cosa sai su cosa voglia dire chiamare una funzione, che cosa e' lo stack di esecuzione del codice ?
    2) che cosa e' una funzione ricorsiva? QUESTA e' UN PELINO piu' complicata, ma il punto 1) risolve il problema.
  • Re: Errore di segmentazione (core dump creato)

    Si la funzione la richiamo nel main e lo stack serve per salvare dati come le variabili durante l’esecuzione della funzione. La ricorsiva è una funzione che viene definita tramite se stessa. Ho capito che manca qualcosa in f 1
  • Re: Errore di segmentazione (core dump creato)

    Ripeto ... l'hai scritta tu f 1?
  • Re: Errore di segmentazione (core dump creato)

    Ho risolto, grazie! Dovevo solo dichiarare f 1 e f2 all'inizio
  • Re: Errore di segmentazione (core dump creato)

    Caris ha scritto:


    Ho risolto, grazie! Dovevo solo dichiarare f 1 e f2 all'inizio
    No, la soluzione non è quella.
  • Re: Errore di segmentazione (core dump creato)

    Caris ha scritto:


    Ho risolto, grazie! Dovevo solo dichiarare f 1 e f2 all'inizio
    Ma neanche per sogno
  • Re: Errore di segmentazione (core dump creato)

    Avete interpretato l'ultimo post dell'op come l'aver aggiunto i prototipi delle due funzioni?

    @Caris a scanso di equivoci posta il codice "funzionante".
  • Re: Errore di segmentazione (core dump creato)

    Dovevo solo dichiarare f 1 e f2 all'inizio
    C'è poco da interpretare. A meno che non ci manchi un pezzo della discussione che non è avvenuta nel forum ...
  • Re: Errore di segmentazione (core dump creato)

    oregon ha scritto:


    C'è poco da interpretare.
    Ci sarà anche poco da interpretare, e io stesso non nutro grandi aspettative nei confronti del prossimo in generale, ma se lo stesso op che prima lamentava un crash del programma adesso dice di aver risolto, sinceramente qualche dubbio mi viene sul fatto che ci sia stato un misunderstanding, dovuto per esempio alla poca padronanza dell'op con la terminologia informatica.

    oregon ha scritto:


    A meno che non ci manchi un pezzo della discussione che non è avvenuta nel forum ...
    Mi verrebbe da chiederti cosa intendi, ma probabilmente anche in questo caso c'è poco da interpretare!
  • Re: Errore di segmentazione (core dump creato)

    Quello che intendo è semplicissimo ... che il nostro op abbia dialogato su altro forum con altri per arrivare a conclusioni sbagliate riportate poi qui.
Devi accedere o registrarti per scrivere nel forum
13 risposte