PDA

View Full Version : [C] errore di segmentazione


VendeR
05-04-2006, 20:04
raga ho un problema strano: ho fatto in laboratorio di info un programma che funzionava perfettamente, ma appena tornato a casa lo stesso identico codice non ne ha più voluto saperne di funzionare.. mi da sempre "errore di segmentazione". da cosa può essere causato?
l'unica cosa che mi viene in mente è che in laboratorio i pc hanno installato win2000, mentre sul mio pc (ho provato anche su quello di un mio amico ma è lo stesso) ho win xp.. può essere causato dal differente os? avreste una idea su come poter risolvere il problema??
il programma (la parte che genera l'errore e che vi ho incollato qui sotto) apre un file di testo, e, allocando dinamicamente la memoria (la lunghezza del vettore di strutture), salva i valori letti su un vettore di strutture..
o almeno così faceva.. :mbe:


int main (){
int i;
char stringa[100];
struct censura {
char sba [100];
char giu [100];
};
FILE *fpo;
FILE *fpc;
struct censura *ip;


if((fpc=fopen("correzione.txt","r"))==NULL){
printf("Errore letture file correzione.\n");
}
else{
while(!feof(fpc)){
ip=(struct censura *) realloc(ip ,sizeof (struct censura)*(i+1));

/*QUA DA ERRORE DI SEGMENTAZIONE*/

fscanf(fpc,"%s %s",ip[i].sba,ip[i].giu);
printf("%s %s\n",ip[i].sba,ip[i].giu);
i++;
}
}
fclose(fpc);

GioVesas
06-04-2006, 08:18
Ma il file esiste e le trova?
Altrimenti la close di un file pointer NULL può causare segmentation fault.
Prova a mettere la fclose dentro l'else.

sottovento
06-04-2006, 08:27
Ciao,
nel codice non vedo l'inizializzazione della variabile i, che usi per allocare memoria. Non so se nel resto del programma fai questa inizializzazione.
Se non la fai, il contenuto della variabile e' indefinito. In laboratorio andava bene perche' il valore (casuale) contenuto di permetteva di non far fallire la realloc().

Controlla sempre l'esito delle malloc(), realloc() e cosi' via: se vanno a buon fine ti tornano un indirizzo valido, altrimenti NULL. E' probabile che, a causa di questo, ti venga ritornato NULL. I controlli di queste cose sono fondamentali.

High Flying
Sottovento

VendeR
07-04-2006, 00:48
i file esistono e li trova..
ho risolto il poblema: non inizializzavo ip ed i :D :D :D
grazie a tutti per i consigli!!