Errore di segmentazione

di il
9 risposte

Errore di segmentazione

Quando provo ad avviare questo programma mi da errore di programmazione. Qualcuno a dimri a cosa è dovuto? Qui di seguito riporto il mi programmino (una stupidata).

#include <stdio.h>

int main () {
int x,y,i,t;
int a[x];
printf ("Inserisci il numero di elementi che deve contenere l'array a \n");
scanf ("%d", &x);
printf ("Inserisci gli elementi dell'array \n");
for (i=0;i<x;i++) {
scanf ("%d", &a);
}
printf ("Inserisci il numero da cercare nell'array\n");
scanf ("%d", &y);
for (i=0;i<x;i++) {
if (a==y)
t=1;
}
if (t=1)
printf ("Il numero inserito è presente nell'array\n");
else
printf ("Il numero inserito non è presente nell'array\n");
}

9 Risposte

  • Re: Errore di segmentazione

    Ciao, l'array non è istanziato correttamente. Devi PRIMA chiedere all'utente il valore di x e POI dichiarare l'array.
  • Re: Errore di segmentazione

    Int a[x];
    printf ("Inserisci il numero di elementi che deve contenere l'array a \n");
    scanf ("%d", &x);

    questa cosa è male!

    se vuoi fare un allocazione dinamica della memoria devi usare la malloc() altrimenti i vettori devo essere inizializzati staticamente.
  • Re: Errore di segmentazione

    E aggiungo che non è sempre possibile usare quel codice se il compilatore non è compliant C99.
  • Re: Errore di segmentazione

    Grazie per gli aiuti, la cosa strana è che in alcuni altri esercizi che ho fatto tipo questo


    int main () {
    int x;
    int i;
    int a[x];
    printf ("Inserisci il numero di elementi che deve contenere l'array a \n");
    scanf ("%d", &x);
    printf ("Inserisci gli elementi dell'array \n");
    for (i=0;i<x;i++) {
    scanf ("%d", &a);
    }
    for (i=0;i<x;i++) {
    printf ("%d ", a);
    }
    printf ("\n");
    }

    il problema non si presenta!
  • Re: Errore di segmentazione

    Il problema non si presenta solo "per caso", perché la memoria che vai ad usare è comunque allocata al processo che si sta eseguendo, ma quel codice è comunque gravemente sbagliato.

    Del resto, logicamente, pensa al fatto che le istruzioni di un programma sono eseguite in sequenza, dalla prima verso l'ultima. Se non hai ancora eseguito la scanf per l'input di x, la x conterrà un valore casuale con cui verrà preparato il vettore. Quindi, lo spazio allocato non sarà quello che tu indichi ma casuale.
  • Re: Errore di segmentazione

    Sicuro che non si presenta il problema???
    prova a farlo girare e ti becchi una raffica di segmentation fault o numeri a caso.
    quando compili usa -Wall -pedantic per vedere i warning
  • Re: Errore di segmentazione

    L'ultimo che ho postato ho provato a rieseguirlo or ora dal terminale e funziona correttamente!
  • Re: Errore di segmentazione

    Rileggi quello che ti ho scritto ... il codice è comunque sbagliato.
  • Re: Errore di segmentazione

    al7e91 ha scritto:


    L'ultimo che ho postato ho provato a rieseguirlo or ora dal terminale e funziona correttamente!
    Premesso che a me il tuo codice non funziona, prova ad aggiungere
    printf("%d\n", x);
    subito dopo la dichiarazione della variabile x: a me esce 1968737493. Subito dopo tu dichiari un array di int che ha quella dimensione e questo è il motivo degli errori.
Devi accedere o registrarti per scrivere nel forum
9 risposte