PDA

Visualizza la versione completa : Segmentation fault???


BugArzu
03-10-2003, 14:32
sto realizzando un programma in C (in ambiente Linux), per la manipolazione di file di testo, ma continuo a scontrarmi con l'errore

"Segmentation fault (core dumped)"

sapreste spiegarmi il significato di tale messaggio di errore e le sue possibili cause?

GRAZIE

PS - compilazione e linkaggio del programma danno esito positivo. l'errore suddetto avviene dopo un numero costante di iterazioni di una funzione del programma (ogni iterazione corrisponde alla manipolazione di un file)

Johnny_Depp
03-10-2003, 14:34
si è verificato un Overflow... es: una variabile può contenere valori compresi tra [1 e 10] e tu hai inseito valori al di fuori del range.

hai per caso utilizzato gli array (o vettori di caratteri?)

posta il codice:

BugArzu
03-10-2003, 15:31
in effetti si, uso array di char e char *, ma proprio per questo anch'io ho pensato per prima cosa a loro: ho ricontrollato più volte il codice, ma non trovo il bug.

(quasi) tutte le funzioni hanno dei char * come argomenti e credo che il bug sia in questi passaggi...

ma non capisco perchè la stessa funzione non dia problemi alla prima esecuzione (quindi al primo file) e ne dia invece alla 2a esecuzione (2° file, del tutto equivalente al primo)

V1RuZ
03-10-2003, 22:31
Il tuo codice è andato a scrivere fuori dallo spazio di indirizzamento assegnato al processo dal SO.
Se usi puntatori o cose simili, soprattutto in un ciclo(o iterazione) devi sempre allocare la memoria con malloc o calloc, altrimenti rischi i segmentation fault che sono errori a runtime e non a tempo di compilazione

TheGreatWorld
04-10-2003, 01:00
Segmentantion faul = Errore rispetto la segmentazione

Hai scritto fuori dallo spazio di indirizzamento del segmento o (come credo sia in questo caso) hai scritto su uno spazio riservato di sola lettura (come il segmento text). Non e' che hai fatto una roba tipo:

char *p;
p = "ciao";
strcpy(p, "miao");
oppure
p[0] = 'a';

Questi non sono errori di sintassi (quindi il compilatore non te li rileverà) ma essendo la zona text marcata come read-only ed essendo la stringa "ciao" allocata li niente di piu' facile che tu abbia ottenuto quell'errore. Pasta un po di codice.
bye

BugArzu
04-10-2003, 16:52
:jam:

uhmm, spero di non aver osato troppo porgendovi i sorgenti (ridotti all'osso) del programma... se è troppo, non guardateli e insultatemi pure, ma quell'invito a pastare del codice è stato irresistibile....

- archivio ".tar" con tutti i file (http://spazioweb.inwind.it/arzu/private/storing/prototipo-srg.tar)

non so se winzip (e affini) gestiscano gli archivi .tar: se no, ecco i singoli file:
- prototipo.cpp (http://spazioweb.inwind.it/arzu/private/storing/prototipo.cpp)
- func.cpp (http://spazioweb.inwind.it/arzu/private/storing/func.cpp)
- defs1.h (http://spazioweb.inwind.it/arzu/private/storing/defs1.h)

io compilo prototipo.cpp e func.cpp, avvio Make (sto lavorando in ambiente Linux)... tutto ok.

avvio l'eseguibile con:

$ ./prototipo -a ./dir1

RISULTATO: Segmentation fault durante l'eleborazione del 6° file (su 8 presenti della dir1)

riprovo:

avvio l'eseguibile con:

$ ./prototipo -a ./dir2

RISULTATO: Segmentation fault durante l'eleborazione del 18° file (su 18 presenti della dir2)

NOTE: dir1 e dir2 sono directory contenenti i file .html da processare (se ci sono altri file verranno ignorati);
l'opzione -a è inutile ma indispensabile per l'esecuzione del prog: è un residuo della scarnificazione del programma completo per ottenere lo scheletrico prototipo...

GRAZIE! GRAZIE! GRAZIE!

Loading