Search code examples
csegmentation-faultscanfargvcoredump

Segmentation fault (core dumped) when using fscanf to read into a pointer


I'm trying to use fscanf to read and print every character on the screen, but I'm getting a segmentation fault (core dumped) when I run the program. Here's my code:

#include <stdio.h>

main(int argc, char * argv[]) {
    int *a ;
    FILE *input;

    if (argc>=2) {
        input= fopen(argv[1],"r");

        if (input!=NULL) {
            while (feof(input)==0) {
                fscanf(input,"%d\n",a);
                printf("%d\n",*a);
            }
            fclose(input);
        } else {
            printf("Error!\n");
        }
    }
}

I provide the file as an argument, like this:

./myprog input.txt

The file input.txt contains this:

23
47
55
70

Solution

  • Variable a is not initialized to point to a valid memory address.

    Therefore, it is most likely pointing to an invalid memory address.

    Here is one way to fix it:

    int *a = malloc(sizeof(int));
    ...
    free(a); // when done using it
    

    Here is another way to fix it:

    int b;
    int *a = &b;
    

    But I suggest that you follow the steps below in order to make it simpler and cleaner...


    Change this:

    int *a;
    

    To this:

    int a;
    

    And this:

    fscanf(input,"%d\n",a);
    

    To this:

    fscanf(input,"%d\n",&a);