Errore di segmentazione in c [risolto]

di il
9 risposte

Errore di segmentazione in c [risolto]

Ciao a tutti,
sto facendo questo programma ma quando lo vado ad eseguire mi da un errore di segmentazione in questa riga e si blocca
*num_algebrico[i] = leggiareal;

il codice del programma è questo

[code]void acquisizione_algebrica(double *num_algebrico[])
{
    int i = 0,
        uscita_menu = 0;

    double leggiareal,
               leggiaimg;

    for(i = 0; i <=1; i++)
    {
        printf("scrivi a e b ");
        if (i == 0)
        {
            printf("\na = ");
            if (scanf("%lf", &leggiareal)==1)
            {
                *num_algebrico[i] = leggiareal; /*errore*/
            }
            else
            {
                printf("\nERRORE: Carattere non inserito correttamente.\n");
                uscita_menu = 1;
            }     
        }
        else if (i == 1)
        {
            printf("\nb = ");
            if (scanf("%lf", &leggiaimg) ==1)
            {
                *num_algebrico[i] = leggiaimg;
            }
            else[code]
{
printf("\nERRORE: Carattere non inserito correttamente.\n");
uscita_menu = 1;
}
}
else
{
printf("ERRORE\n");

uscita_menu = 1;
}
}
}[/code]

in questo programma vorrei leggere un numero double e inserirlo nell'array num_algebrico per poi richiamare questa funzione in un altra funzione

9 Risposte

  • Re: Errore di segmentazione in c [risolto]

    Usa i tag code per il codice nel forum ... e soprattutto inserisci il main con cui chiami quella funzione ...
  • Re: Errore di segmentazione in c [risolto]

    Con
        double *num_algebrico[MAX],
               *num_trigonometrico[MAX];
    avrai due array di puntatori a double.
    Secondo me dovresti scrivere
        double num_algebrico[MAX],
               num_trigonometrico[MAX];
    e rivedere di conseguenza tutto il codice
  • Re: Errore di segmentazione in c [risolto]

    candaluar ha scritto:


    Con
        double *num_algebrico[MAX],
               *num_trigonometrico[MAX];
    avrai due array di puntatori a double.
    Secondo me dovresti scrivere
        double num_algebrico[MAX],
               num_trigonometrico[MAX];
    e rivedere di conseguenza tutto il codice

    io ho due array di puntatori perchè ho anche l'acquisizione_ che però mi da lo stesso errore
    void acquisizione_trigonometrica(double *num[])
    {
        int i,
            uscita_menu = 0;
    
        double leggiep,
               leggiecostheta;
    
        char segno_sin_theta;
    
    
        for(i = 1; i <=1; i++)
        {    
            printf("scrivi p, cosTheta e sinTheta dove p(cosTheta + sinTheta)"); 
    
            if (i == 0)
            {
                printf("\np = ");
                if(scanf("%lf", &leggiep) == 1)
                {
                    *num_trigonometrico[i] = leggiep; /*errore*/
                }
                else
                {
                    printf("\nERRORE: Carattere non inserito correttamente.\n");
                    uscita_menu = 0;
                }
            }
    e poi è richiamata allo stesso modo della prima
  • Re: Errore di segmentazione in c [risolto]

    Piuttosto che fare supposizioni e perdere tutti tempo, perché non posti il main e tutte le funzioni utili in un solo colpo in modo da capirci qualcosa?
  • Re: Errore di segmentazione in c [risolto]

    Come ti ho detto, devi modificare di conseguenza il resto del codice...
    void acquisizione_trigonometrica(double *num_trigonometrico[])
    diventa
    void acquisizione_trigonometrica(double num_trigonometrico[])
    e
    *num_trigonometrico[i] = leggiep; /*errore*/
    diventa
    num_trigonometrico[i] = leggiep; /*Ok*/
  • Re: Errore di segmentazione in c [risolto]

    candaluar ha scritto:


    Come ti ho detto, devi modificare di conseguenza il resto del codice...
    void acquisizione_trigonometrica(double *num_trigonometrico[])
    diventa
    void acquisizione_trigonometrica(double num_trigonometrico[])
    e
    *num_trigonometrico[i] = leggiep; /*errore*/
    diventa
    num_trigonometrico[i] = leggiep; /*Ok*/

    il programma in questo modo funziona ma dopo che ho richiamato
    
    acquisizione_algebrica(&num_algebrico[MAX]);
    mi da un array di solo 0
    
    
    void acquisizione_algebrica(double num_algebrico[])
    {
        int i = 0,
            uscita_menu = 0;
    
        double leggiareal,
               leggiaimg;
    
    
        for(i = 0; i <=1; i++)
        {
            printf("scrivi a e b dove a + ib è un numero complesso in forma algebrica.");
            if (i == 0)
            {
                printf("\na = ");
                if (scanf("%lf", &leggiareal)==1)
                {
                    num_algebrico[i] = leggiareal; /*errore*/
                }
                else
                {
                    printf("\nERRORE: Carattere non inserito correttamente.\n");
                    uscita_menu = 1;
                }     
            }
            else if (i == 1)
            {
                printf("\nb = ");
                if (scanf("%lf", &leggiaimg) ==1)
                {
                    num_algebrico[i] = leggiaimg;
                    printf("num_algebrico i  è  %lf\n", num_algebrico[i] );
                }
                else
                {
                    printf("\nERRORE: Carattere non inserito correttamente.\n");
                    uscita_menu = 1;
                }
            }
            else
            {
                printf("ERRORE\n");
    
                uscita_menu = 1;
            }
        }
    }
    
    void acquisizione_trigonometrica(double num_trigonometrico[])
    {
        int i,
            uscita_menu = 0;
    
        double leggiep,
               leggiecostheta;
    
        char segno_sin_theta;
    
    
        for(i = 1; i <=1; i++)
        {    
            printf("scrivi p, cosTheta e sinTheta dove p(cosTheta + sinTheta)"); 
            printf("\nè un numero complesso in forma trigonometrica");
            if (i == 0)
            {
                printf("\np = ");
                if(scanf("%lf", &leggiep) == 1)
                {
                    num_trigonometrico[i] = leggiep; /*errore*/
                }
                else
                {
                    printf("\nERRORE: Carattere non inserito correttamente.\n");
                    uscita_menu = 0;
                }
            }
            else if (i == 1)
    
        }
    }
  • Re: Errore di segmentazione in c [risolto]

    Questa chiamata è sbagliata
    acquisizione_algebrica(&num_algebrico[MAX]);
    &num_algebrico[MAX] ti da un puntatore all'elemento alla posizione [MAX], ovvero fuori dall'array!!!
    Potevi scrivere &num_algebrico[0] così almeno fai puntare al primo elemento!
    La forma da usare comunque è questa
    acquisizione_algebrica(num_algebrico);
  • Re: Errore di segmentazione in c [risolto]

    candaluar ha scritto:


    Questa chiamata è sbagliata
    acquisizione_algebrica(&num_algebrico[MAX]);
    &num_algebrico[MAX] ti da un puntatore all'elemento alla posizione [MAX], ovvero fuori dall'array!!!
    Potevi scrivere &num_algebrico[0] così almeno fai puntare al primo elemento!
    La forma da usare comunque è questa
    acquisizione_algebrica(num_algebrico);
    grazie mille adesso funziona
  • Re: Errore di segmentazione in c [risolto]

    Dato che si trattava inequivocabilmente di un esercizio, l'importante è che tu abbia capito l'errore che avevi commesso
    Buono studio
Devi accedere o registrarti per scrivere nel forum
9 risposte