c++ - 从 void* 到 int* 的无效转换

标签 c++ fork shared-memory mmap

我有一个全局变量:

static int *avgg;

在主函数中:

avgg = mmap(NULL, sizeof *avgg, PROT_READ | PROT_WRITE, 
                MAP_SHARED | MAP_ANONYMOUS, -1, 0);

pid_t  pid, wpid;
int status;

 pid = fork();
 if (pid == 0) {
      avg(argc,argv);
      print_avg();

  }
 else{ 
     while ((wpid = wait(&status)) > 0) {

     }
 cout<<"Parent process";
     print_avg();

通过使用 mmap,我试图在父进程和子进程之间共享内存,但出现错误:

invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]
                 MAP_SHARED | MAP_ANONYMOUS, -1, 0);

最佳答案

您正试图将 mmap 的返回值(void *)隐式转换为 int *,而您的编译器设置不允许您在没有显式转换的情况下这样做。

尝试 avgg = (int *)mmap(NULL, sizeof *avgg, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);

关于c++ - 从 void* 到 int* 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33173252/

相关文章:

c++ - 在 C# 中将数组数组传递给 DLL 的安全方法是什么?

c - 消息队列(msgget - msgsnd - msgrcv)Linux - EIDRM

python - 如何在线程之间共享对象?

c - 从多线程进程调用 system(3) 是否安全?

c - 在 Linux 下使用信号量和共享内存

c++ - 使用数组指针索引数组

C++ 通用树按两个标准进行比较

C++ 'Runtime error time: 0 memory: 3452 signal:11'

github - 如何跟踪我的 fork 解决的所有上游问题

git - 如何恢复 merge 到我 fork 的仓库的 pull 请求,而不是 merge 到我的该仓库副本