在OSX 10.12上使用mmap()时获取“无法分配内存”错误

时间:2017-01-29 09:26:44

标签: c mmap

我找到了一些答案,但它们都只适用于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

1 个答案:

答案 0 :(得分:0)

getenv()函数通常会返回指向您无法修改的内存的指针。而且最确定的是,它不会返回一个额外的空间,你可以追加到它。

所以你的strcat(homepath, file)正在践踏记忆它不应该发生任何事情都可能发生。它可能(似乎)正常工作,它可能会立即失效或相当晚,甚至可能会驱逐monkies从您的排气口。