从地址构造 C 中的指针

标签 c pointers mpi

我最初从另一个处理器获得一个指针的地址,我需要一个指向该地址处的项目的指针。不要太担心 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 .来自一个进程的指针在另一个进程的上下文中毫无意义。

您有多种选择:

  1. 使用threads而不是流程。
  2. 使用shared memory .
  3. 发送实际数据而不仅仅是一个指针。

如果您的进程可以驻留在不同的计算机上,则只有最后一个选项可行。

关于从地址构造 C 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15493601/

相关文章:

java - 在Java中,如何模拟 "converting negative numbers casted by unsigned char in c"?

c - 是否可以检查取消引用任意内存是否会使 C 中的程序先验崩溃?

c++ - MPI_Bcast : how to ensure that "correct" root is broadcasting 有困难

C++ MPI 发送接收问题

c - C中的算术右移

c - 如何将 printf 中写入的值调用到另一个 printf

c - 我的 mex 文件有什么问题?

swift - withUnsafeBytes + 通用类型行为

c - 迭代器效率: pointer compare or counter

c++ - 为什么 mpirun 默认复制程序?