使用fseek时,C代码是segfaulting

时间:2016-08-09 00:27:26

标签: c gcc segmentation-fault

我有一个代码,我认为我过去已成功编译,但现在我遇到了段错误,我看不出原因。

v

我正在尝试将文件读入内存,因此我获得了适当的大小并尝试mem::forget(v)该内存量。我认为这是fseek功能的分段,但我不明白为什么......

1 个答案:

答案 0 :(得分:2)

fopen如果无法打开文件,则可以返回NULL。这可能就是这里发生的事情。你应该检查它:

if(!numbers){/*report error and exit*/}

此外,如果您只想获取文件的大小,请考虑使用stat,如果您的系统支持它。如果您还想打开它并将其全部读入内存,我建议您使用mmap,如果您的系统支持它:

#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>

int fd = open("e13.txt", O_RDONLY);
if(!fd){/*report error and exit*/}
size_t len;
{
    struct stat stat_buf;
    if(fstat(fd, &stat_buf)){
        close(fd);
        /*report error and exit*/
    }
    len = stat_buf.st_size;
}
void *map_addr = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0);
close(fd);
if(!map_addr){/*report error and exit*/}
/*do work*/
munmap(map_addr, len);