从void*到int*的转换无效

Invalid conversion from void* to int*

本文关键字:转换 无效 void int      更新时间:2023-10-16

我有一个全局变量:

static int *avgg;

main函数:

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

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

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

嗨,你可以用下面的代码段来解决这个问题:

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

谢谢。