PDA

View Full Version : [C] segmentation fault


beppegrillo
22-11-2004, 16:54
#include <stdio.h>
#include <stdlib.h>
#define FILE2 "prova.txt"

int main (int argc , char **argv) {
FILE *fp;
struct lista {
int value;
} *list_p;

if ((fp=fopen(FILE2,"r")) != NULL)
fscanf(fp,"%d", &(list_p->value));
printf("%d", list_p->value);


system("Pause");
}

Come mai mi và in segmentation fault??:confused:

Ziosilvio
22-11-2004, 17:20
Originariamente inviato da beppegrillo
int main (int argc , char **argv) {
FILE *fp;
struct lista {
int value;
} *list_p;

if ((fp=fopen(FILE2,"r")) != NULL)
fscanf(fp,"%d", &(list_p->value));
printf("%d", list_p->value);
list_p e' un puntatore non inizializzato, che puo' avere qualunque valore.
Se riesci ad aprire il file, scrivi roba a caso su una zona di memoria a caso --- il che, di solito, causa un segmentation fault.

A proposito: se non riesci ad aprire il file, la printf viene eseguita.

beppegrillo
22-11-2004, 17:25
Originariamente inviato da Ziosilvio
list_p e' un puntatore non inizializzato, che puo' avere qualunque valore.
Se riesci ad aprire il file, scrivi roba a caso su una zona di memoria a caso --- il che, di solito, causa un segmentation fault.

A proposito: se non riesci ad aprire il file, la printf viene eseguita.
Si è vero fai conto che ci sia la parentesi graffa dopo l'if e dopo il printf.
Ma il puntatore non punta alla struttura? Non è già inizializzato all'indirizzo della struttura?

ilsensine
22-11-2004, 18:15
No; hai dichiarato e allocato un puntatore, ma nessuna struttura a cui farlo puntare. Quindi punta a caso, come ogni buona variabile non inizializzata ;)