我最初从另一个处理器获得一个指针的地址,我需要一个指向该地址处的项目的指针。不要太担心 MPI_Recv,只要知道我正在从另一个处理器获取信息即可。所以我有:
MPI_Recv(&a, sizeof(int), MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
c = a;
printf("%d",c[0]);
为什么这会给我一个段错误?在设置 c = a 之前,我也尝试过为 c 分配内存,但它仍然会出现段错误。
最佳答案
每个进程都有自己独立的virtual address spaces .来自一个进程的指针在另一个进程的上下文中毫无意义。
您有多种选择:
- 使用threads而不是流程。
- 使用shared memory .
- 发送实际数据而不仅仅是一个指针。
如果您的进程可以驻留在不同的计算机上,则只有最后一个选项可行。
关于从地址构造 C 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15493601/