|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
[C] errore di segmentazione
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.. ![]() Codice:
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);
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jun 2004
Città: Pecetto
Messaggi: 73
|
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.
__________________
Gianni |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
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
__________________
In God we trust; all others bring data |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
i file esistono e li trova..
ho risolto il poblema: non inizializzavo ip ed i ![]() ![]() ![]() grazie a tutti per i consigli!!
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:49.