我有一个代码,我认为我过去已成功编译,但现在我遇到了段错误,我看不出原因。
v
我正在尝试将文件读入内存,因此我获得了适当的大小并尝试mem::forget(v)
该内存量。我认为这是fseek功能的分段,但我不明白为什么......
答案 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);