Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    2

    [C] segmentation fault + valori inaspettati

    ho fatto questo programma in c. viene compilato senza problemi però quando lo eseguo mi crea due problemi:

    -) segmentation fault (solo quando lo eseguo per N>=10)
    -) valori inaspettati

    codice:
    #include <stdio.h>
    #include <math.h>
    
    int i,N;
    
    main() {
    
    double a , b , delta;
    double x[N];
    
    printf("dammi il numero degli intervallini\n");
    printf("-----------\n");
    scanf("%d",&N);
    printf("-----------\n");
    printf("dammi gli estremi dell intervallo\n");
    printf("inizia con a:\n");
    scanf("%lf", &a);
    printf("adesso dammi b:\n");
    printf("-----------\n");
    scanf("%lf",&b);
    
    delta=(b-a)/N;
    
    for(i=0;i<N;i++){
            x[i]=a+i*delta;
            printf("%f %f\n",a+i*delta,x[i]);
            }
    }

    adesso riporto il messagio dopo la compilazione. i valori con cui ho fatto il test sono:
    N=20
    a=0
    b=5

    dammi il numero degli intervallini
    -----------
    20
    -----------
    dammi gli estremi dell intervallo
    inizia con a:
    0
    adesso dammi b:
    -----------
    5
    0.000000 0.000000
    0.250000 0.250000
    0.500000 0.500000
    0.750000 0.750000
    1.000000 1.000000
    1.250000 1.250000
    1.500000 1.500000
    12.250000 1.750000
    14.000000 14.000000
    31.500000 15.750000
    Segmentation fault
    ---------------------------------------------------------------------------
    ---------------------------------------------------------------------------

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [C] segmentation fault + valori inaspettati

    Originariamente inviato da gledi
    codice:
    #include <stdio.h>
    #include <math.h>
    
    int i,N;
    
    main() {
    
    double a , b , delta;
    double x[N];
    
    printf("dammi il numero degli intervallini\n");
    printf("-----------\n");
    scanf("%d",&N);
    1. N è dichiarato ma non inizializzato e pertanto il suo valore non è definito.
    2. In C non è permesso dichiarare un array in questo modo. E anche se si potesse, come hai scritto tu è sbagliato in quanto PRIMA crei un array di dimensione indefinita e POI valorizzi N. Se vuoi creare l'array a run time dovresti usare malloc/calloc (e free).

    Oppure, se conosci la dimensione a compile time definisci N tramite una direttiva per il preprocessore:

    codice:
    #define N 10
    ...
    double x[N];
    3. Il main DEVE avere valore di ritorno intero.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    2
    adesso è tutto più chiaro, "sono un principiante". ciao e grazie
    ---------------------------------------------------------------------------
    ---------------------------------------------------------------------------

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.