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