2017-01-29 1 views
0

答えは見つかっていますが、すべてLinuxでしか動作しません。しかし、MacOSはどうですか?私のコードはubuntuで大丈夫ですので、貼り付ける必要はありません。ありがとうございました! -------------------------------------------- 改訂して貼り付けてくださいコード。OSX 10.12でmmap()を使用しているときに「メモリを割り当てることができません」というエラーが表示される

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()機能は、一般的に、あなたが/変更しないでくださいすることができないメモリへのポインタを返します。そして、あなたが追加することができる最後の余分なスペースの束をもって、最も確実に1つを返しません。

あなたのstrcat(homepath, file)はメモリを踏みにじっているので、それ以降は何も起こりません。それは正しく動作するかもしれませんが、すぐにまたはかなり後で失敗するかもしれません、または排気ポートから僧侶を追放するかもしれません。

関連する問題