【发布时间】:2015-05-10 05:24:23
【问题描述】:
我正在尝试使用 mmap 创建/访问两个不同的 (N+2)*(N+2) 二维双精度数组,以便多个线程可以查看它们自己的部分并更改它,应用更改让所有其他人都能看到。这是我所拥有的:
int main(int argc, char *argv[]) {
int N = atoi(argv[1]);
int numProcs = atoi(argv[2]);
int ARRAY_SIZE = (N+2)*(N+2)*sizeof(double);
double **grid = (double **) mmap(NULL, ARRAY_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
if (grid == MAP_FAILED) {
printf("Error mmapping grid\n");
}
double **newGrid = (double **) mmap(NULL, ARRAY_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
if (newGrid == MAP_FAILED) {
printf("Error mmapping grid\n");
}
当我运行它或尝试访问其中的任何内容时,我遇到了分段错误。我也尝试分配内存:
for(i = 0; i < N+2; i++) {
for(j = 0; j < N+2; j++) {
grid[i][j] = malloc(sizeof(double));
}
}
for(i = 0; i < N+2; i++) {
for(j = 0; j < N+2; j++) {
newGrid[i][j] = malloc(sizeof(double));
}
}
但我遇到了:错误:从不兼容的类型“void *”分配给“double” newGrid[i][j] = malloc(sizeof(double));
我相信我在这里遗漏了 mmap 的工作原理,有人能指出我正确的方向吗?
【问题讨论】:
-
提示:grid[0] 包含什么?