2013-03-26 192 views
2

我尝试在iOS设备上使用mmap用下面的代码MMAP iOS上有时会返回为0xffffffff

struct stat s; 
    int status; 
    size_t size; 
    int fd; 

    fd = open ([dataFile cStringUsingEncoding:NSUTF8StringEncoding], O_RDONLY); 
    fcntl(fd, F_NOCACHE); 
    status = fstat (fd, & s); 
    if (status < 0) 
    { 
     // error handling 
    } 
    size = s.st_size; 
    FuncFileLog(@"%@", @"before read"); 
    off_t offset = 0; 
    char* data = (char *) mmap(NULL, size, PROT_READ, MAP_SHARED, fd, offset); 

    char *pch; 
    int lastPosInString = 0; 

    pch=strchr(data,'\n'); 

long lineCounter = 0; 

    while (pch != NULL) 
    { 
     size_t lineLength = 0; 

     int posInString = pch - data + 1; 
     lineLength = posInString - lastPosInString; 

     char *out = calloc(lineLength, sizeof(char)); 

     memcpy(out, data + lastPosInString, lineLength); 
     out[lineLength - 1] = '\0'; 

     if (lineCounter > 0) 
     { 
      // do something 
     } 

     lastPosInString = posInString; 
     pch=strchr(pch+1,'\n'); 

     lineCounter = lineCounter + 1; 
    } 

    munmap((void *)data, size); 
    close(fd); 

它的工作原理,但有时没有理由,当我读到一个文件约350万桶我得到的,因为我的数据的EXC_BAD_ACCESS来自mmap的指针是0xffffffff这是我认为的错误。 它似乎只发生在模拟器中。

我得到 errno:12 Cannot allocate memory 目前仅在

回答

2

与 后卫的malloc,边后卫,涂鸦和僵尸模拟器我建议阅读mmap手册页(打开Terminal.app并键入man mmap

RETURN VALUES 
    Upon successful completion, mmap() returns a pointer to the mapped region. 
    Otherwise, a value of MAP_FAILED is returned and errno is set to indicate 
    the error. 

还有一部分描述了可能设置的errno

+0

谢谢,现在我看到它的errno:12不能分配内存 它现在发生只有当我在模拟器中运行与警卫malloc和涂鸦 – Sebastian 2013-03-26 19:45:41

相关问题