为什么这会在读取 RAW 文件时打印出分段错误(核心已转储)?

Why does this print a segmentation fault (core dumped) while reading a RAW file?

你能告诉我为什么这段代码会出现段错误吗?我写这个是为了从 RAW 文件中读取数据并将其放入缓冲区数组中。 RAW 文件包含每个 512 字节的块,因此数组的大小为 512。

#include <stdio.h>
#include <stdlib.h>

long int findSize(FILE *file);

int buffer[512];

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        printf("Usage: ./recover IMAGE\n");
    }

    FILE *file = fopen(argv[1], "r");
    long int size = findSize(file);
    int blocks = size/512;
    int counts = 0;

    for (int i = 0; i < blocks; i++)
    {
        while (fread(buffer, 1, 512, file) == 512)
        {
            printf("%i\n", buffer[counts]);
            counts++;
        }
    }
}


long int findSize(FILE *file)
{
    // checking if the file exist or not
    if (file == NULL) {
        printf("File Not Found!\n");
        return -1;
    }

    fseek(file, 0L, SEEK_END);

    // calculating the size of the file
    long int res = ftell(file);

    // closing the file
    fclose(file);

    return res;
}

在函数 findSize 中,您不应关闭文件,而应倒带:

// fclose(file);
rewind(file);