【问题标题】:Invalid conversion from void* to int*从 void* 到 int* 的无效转换
【发布时间】:2015-10-16 14:42:16
【问题描述】:

我有一个全局变量:

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);

【问题讨论】:

    标签: c++ fork shared-memory mmap


    【解决方案1】:

    您正在尝试将mmap 的返回值(即void *)隐式转换为int *,并且您的编译器设置不允许您在没有显式转换的情况下执行此操作。

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

    【讨论】:

    • “你在选角”不,他不是。
    • 很好,意味着转换。
    【解决方案2】:

    文档明确指出mmap 返回void*,而不是int*

    您可以将前者转换为后者如果您确定您的数据兼容,但您需要进行强制转换,因为没有匹配的隐式转换存在。

    【讨论】:

      【解决方案3】:

      您好,您可以使用此代码段解决此问题:

       int file_descriptor = shm_open("/test_shared_memory", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
       void *address = mmap ( NULL, size, PROT_READ | PROT_WRITE , MAP_SHARED, file_descriptor, 0);
       // For checking that the address mapped correctly or not.
       if (address == MAP_FAILED) {
          printf("Memory map failed. :(");
          return (EXIT_FAILURE);
       }
      

      谢谢。

      【讨论】:

      • 要解决您的问题,您最只需将 int* 转换为 void*。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 2021-05-26
      • 2013-08-19
      相关资源
      最近更新 更多