在 OSX 10.12 上使用 mmap() 时出现 'cannot allocate memory' 错误

Get 'cannot allocate memory' error while using mmap() on OSX 10.12

我找到了一些答案,但它们都只适用于 Linux。但是 MacOS 呢?我的代码在 ubuntu 上没问题,所以我不需要粘贴它们。谢谢! —————————————————————————————————————————— 修改并粘贴我的代码。

void unix_error(char* msg)
{
    fprintf(stderr, "%s: %s\n", msg, strerror(errno));  
    exit(0);
}
void* Mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset)
{
    void* ptr;
    if((ptr = mmap(start, length, prot, flags , fd, offset)) == ((void*)-1)){
        unix_error("mmap");
    }
    return ptr;
}

int main
{
    char *homepath = getenv("HOME");
    char *file = "/Desktop/main.c"; 
    strcat(homepath, file);
    printf("%s\n", homepath);
    int fd = open_file(homepath);
    printf("%d\n", fd);
    char *ptr = Mmap(NULL, filesize, PROT_READ, MAP_PRIVATE, fd, 0);
    write(1, ptr, filesize);
}

得到错误:

/Users/<username>/Desktop/main.c
3
mmap: Cannot allocate memory

getenv() 函数通常 return 是指向您不能/不应修改的内存的指针。而且它肯定不会 return 一个在末尾有一堆额外的 space 你可以追加到。

所以你的 strcat(homepath, file) 正在践踏它不应该的内存,所以在那之后任何事情都可能发生。它可能(看起来)正常工作,也可能立即或相当长时间后失效,甚至可能将猴子从排气口排出。