为什么我会出现此分段错误?

时间:2017-10-11 08:45:28

标签: c segmentation-fault

int main() {
    int fd;     //  File Descriptor for the integer file
    int pagesize=getpagesize(); //  To store the size of virtual page

    printf("\nPage size is %d bytes.\n100 integers require %lu bytes\n",pagesize,100*sizeof(int));
    void *data; //  This is the pointer which will store the returned pointer when mmap() is called

    fd=open("integer", O_RDWR); 

    data=mmap((caddr_t)0, pagesize, PROT_WRITE | PROT_READ, MAP_SHARED, fd,0);
    close(fd);

    sprintf((char*)data,"%d",100);

    return 0;
}

这将返回分段错误11

1 个答案:

答案 0 :(得分:2)

您应该检查来自openmmap的错误。此外,编译警告并包含必要的包含文件。 mmap特别需要在许多系统上使用正确的原型,因为它的off_t参数在你传递0作为最后一个参数时会破坏它。

但这还不够。文件是否存在且非零大小? mmap可以愉快地将页面映射到文件末尾之外,但访问这些页面会导致错误。如果您确实希望将数据写入文件,则需要确保它足够长。请使用ftruncate

另外,我想知道你找到你的文档的哪个博物馆,如果它提到caddr_t作为mmap的第一个参数,但是除此之外,如果编译它也应该有效。