2017-01-29 61 views
0

我找到了一些答案,但它們都只在Linux上工作。但是MacOS怎麼樣?我的代碼在Ubuntu上沒問題,所以我不需要粘貼它們。謝謝! -------------------------------------------- 修改並粘貼我的碼。在OSX上使用mmap()時得到'無法分配內存'錯誤10.12

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

請顯示您的代碼,以便我們可以看到您要做的事情。添加了代碼 – STLDeveloper

+0

@ STL開發人員 – wind2412

+0

這顯然不是製作此消息的代碼。請向我們展示覆制問題所需的所有代碼。 – fuz

回答

0

getenv()函數通常返回一個指向內存,你不能/不應該修改。並且它最終肯定不會返回一個帶有一堆額外空間的可附加空間。

所以你的strcat(homepath, file)是踐踏內存它不應該,所以之後可能發生任何事情。它可能(似乎)工作正常,它可能會立即失效,或者甚至可能會晚點,或者甚至可能將排氣口中的monkies排出。