我有这个循环,它从标准输入读取到数组
sudo systemctl status apache2.service
如果int* arr;
arr = malloc(sizeof(int)*size);
for (i = 0; i < size; i++)
{
read(0, &arr[i], 4);
}
是共享内存指针arr
arr=createSharedMemory(sizeof(int)*size)
当前是细分错误
答案 0 :(得分:1)
检查您从mmap()
获得的退货。
您尝试mmap()
标准输入。除特殊环境外,stdin是某种终端或管道,都不支持内存映射的IO。
尝试此示例:
int* createSharedMemory(size_t size) {
int protection = PROT_READ | PROT_WRITE;
int visibility = MAP_ANONYMOUS | MAP_SHARED;
int *p = (int*)mmap(0, size, protection, visibility, -1, 0);
if (p == (int*)(ptrdiff_t)-1) return NULL;
return p;
}
arr = createSharedMemory(sizeof(int)*size);
if (arr == NULL) {
perror("mmap");
exit(3);
}
偶然地,如果sizeof(int) < 4
(这不太可能),您的读取循环将爆炸。