Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema segmentation fault
Forum - C/C++ - problema segmentation fault

Avatar
faller (Normal User)
Newbie


Messaggi: 14
Iscritto: 14/04/2009

Segnala al moderatore
Postato alle 17:02
Giovedì, 03/12/2009
salve a tutti
Ecco il mio problema: Stò facendo un programmma che riorganizzi gli elementi  di un vettori e calcoli la media e la frequenza  degli elementi stessi.La compilazione procede bene ,però una volta avviato il programma , nella rappresentazione tabulare della frequenza non mi visualizza il testo dandomi al posto del testo  :"segmentation fault".




ecco la funzione:


void tabulare(int risultati[], int size){


int i;
int j;
int o;
int c;
int frequenza[]={0};
printf("*******\n moda \n*******");
printf("\n");
printf("\n");
printf("\n");


printf("%s%15s%15s\n", "voto :", "frequenza:", "tabulare:");

for(o=1;o<size;o++){

      
++frequenza[risultati[o]];

}

for(c=1;c<10;c++){

printf("%d%15d\n", c, frequenza[c]);

}



for(i=1;i!=10;i++){



for(j=0;j!=frequenza;j++){
printf("%s", "*");

}

printf("\n");

}

}





P.S:Scusate la lunghezza e il disordine8-|

PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 18:25
Giovedì, 03/12/2009
Qui sbagli perchè non indichi quanto dovrà essere grande il vettore!
Codice sorgente - presumibilmente C/C++

  1. int frequenza[]={0};



PM Quote
Avatar
faller (Normal User)
Newbie


Messaggi: 14
Iscritto: 14/04/2009

Segnala al moderatore
Postato alle 20:00
Giovedì, 03/12/2009
grazie mille ho risolto. Avevo dimenticato la dimensione a frequenza[].:rotfl:

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 21:58
Giovedì, 03/12/2009
Io non ne sarei tanto sicuro, anche perchè quello potrebbe essere lasciato così, in main l'hai dichiarato quel vettore? Se non erro la dimensione viene presa in automatico.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 8:20
Venerdì, 04/12/2009
@Lawliet: erri, erri...

in C un array non esiste (vedi miei precedenti post), ma decade automaticamente a puntatore in ogni operazione. Ergo, una dichiarazione del tipo:
Codice sorgente - presumibilmente C/C++

  1. int mioArray[];


equivale esattamente a:
Codice sorgente - presumibilmente C/C++

  1. int *mioArray;


In entrambi i casi bisogna allocare la memoria esplicitamente con malloc() o una delle sue varianti.

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 14:55
Venerdì, 04/12/2009
TheKaneB Hai ragione ERRO sull vettore sbagliato!
Io pensavo che si riferiva al vettore passato come parametro per riferimento che si poteva non mettere la dimensione è a quello mi riferivo io. Invece è un altro il problema! Che non ha dichiarato un vettore con dimensione all'interno della funzione ma questo è ovvio :)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 15:21
Venerdì, 04/12/2009
ah certo... se è allocato fuori dalla funzione, tutto quadra :) ma in questo caso non lo alloca nessuno, quindi abbiamo un puntatore non allocato che scodinzola allegro in attesa di far crashare tutto :D

PM Quote