Perchè il debug dà "erorre di segmentazione"?

di il
7 risposte

Perchè il debug dà "erorre di segmentazione"?

Ho scritto un programma che con devC++ compila correttamente (mi dice "Done") senza nessun errore. Però quando faccio il debug, cioè metto il breakpoint in un punto che mi interessa e poi faccio F8, mi spunta il messaggio:
"An access violation (segmentation fault) raised in your program"
Perchè? Che vuol dire? Ho passato il programma a un mio amico che usa un computer Mac e ha un suo compilatore (non so quale) e anche a lui dà lo stesso errore. Come mai?

7 Risposte

  • Re: Perchè il debug dà "erorre di segmentazione"?

    Il motivo è sempre e uno solo: hai pasticciato con i puntatori.
  • Re: Perchè il debug dà "erorre di segmentazione"?

    Se io creo una funzione func che ha come parametro d'ingresso un vettore vin di dimensione dim che posso decidere io, e in uscita restituisce un altro vettore vout, sempre di dimesione dim, è corretto fare così?

    double *func(int dim, double vin[])
    {
    double *vout;
    // trasforma vettore vin ///
    return (vout);
    }

    int main()
    {
    int i, dim;
    double *out;
    double ingr[dim];
    for(i=0; i<dim; i++)
    {
    cin >> ingr;
    }
    out=func(dim, ingr);

    system("pause");
    return 0;
    }

    Ho omesso i vari include per semplicità, mi interessa capire se è corretto che il vettore di uscita sia definito come adimensionale (double *vout). Scrivendo così con devC++ compila senza alcun errore e però, accidenti, non so perchè quando lo eseguo e inserisco il vettore d'ingresso, mi parte la segnalazione errori di microsoft che, almeno credo, sia legata a qualche errore di segmentazione.
  • Re: Perchè il debug dà "erorre di segmentazione"?

    A scanso di equivoci, dove ho scritto // trasforma vettore vin // c'è il corpo della funzione che però qui non interessa specificare, è una qualche azione che trasforma un vettore vin in un vettore vout.
  • Re: Perchè il debug dà "erorre di segmentazione"?

    Ciao azzurrino,
    la variabile dim non è inizializzata, e quindi contiene un valore casuale.
  • Re: Perchè il debug dà "erorre di segmentazione"?

    Sì scusami, in realtà ho dimenticato di scrivere nel main
    cin >> dim;
    cioè di inserire come input la dimensione del vettore d'ingresso (che poi è anche la dimensione del vettore di uscita). In realtà però l'ho fatto nel mio programma, ma l'errore di segmentazione me lo dà lo stesso, quindi il problema non è quello, è stata solo una mia svista nello scirvere la domanda. Ma non è che bisogna usare qualche & da qualche parte per gli indirizzi di un vettore. io a maneggiare vettori non sono molto pratico.
  • Re: Perchè il debug dà "erorre di segmentazione"?

    Devi utilizzare l'allocazione dinamica. Se non sai la simensione del vettore apriori devi far affidamento a new e delete. E devi fare molta attenzione a non scrivere/leggere fuori dal vettore. La prossima volta cerca di mettere un codice completo e di inserirlo dentro i tag code. Cosi avrai senz'altro più risposte.
  • Re: Perchè il debug dà "erorre di segmentazione"?

    Solo una cosa vorrei sapere: new e delete devo scrivere tipo:
    vout= new (nothrow) int[dim];
    e poi scrivo:
    delete[] vout;

    e quest'ultima istruzione prima o dopo il return (vout)?
Devi accedere o registrarti per scrivere nel forum
7 risposte