2017-01-29 18 views
0

Я нахожу ответы, но все они работают только на Linux. Но как насчет MacOS? Мой код в порядке на ubuntu, поэтому мне не нужно вставлять их. Спасибо! -------------------------------------------- Редактируйте и вставьте мой код.Ошибка «не может выделить память» при использовании mmap() в OSX 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

код добавлен. @ STLDeveloper – wind2412

+0

Это, очевидно, не код, который сообщает madethis. Пожалуйста, покажите нам весь код, необходимый для повторения вашей проблемы. – fuz

ответ

0

getenv() функция обычно возвращает указатель на память вы не можете/не следует изменять. И это, безусловно, не возвращает один с кучей дополнительного места в конце, к которому вы можете добавить.

Таким образом, ваш strcat(homepath, file) попирает память, и это не должно произойти после этого. Он может (как представляется,) работать правильно, он может выйти из строя сразу или значительно позже, или даже может вытеснить монахи из вашего выхлопного порта.

Смежные вопросы