2015-10-16 63 views
0

我有一个全局变量:从虚空转换无效*为int *

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

回答

2

你试图隐式转换的mmap的返回值,这是一个void *,转换为int *,并且您的编译器设置不允许您在没有显式强制转换的情况下执行此操作。

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

+1

_“你在投”_不,他不是。 –

+0

好抓,意味着转换。 –

+0

工作。干杯。 –

0

的文件明确指出,mmap回报void*,不int*

您可以将前者转换为后者如果你确定你的数据是兼容,但你需要一个投这样做,因为没有匹配转换存在。

0

嗨,你可以解决这个问题,这个代码段:

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

感谢。

+0

为了解决你的问题,你最简单的将int *转换为void *。 –