64位共享内存段C\linux问题

64位共享内存段C\linux问题,c,linux,64-bit,shared-memory,C,Linux,64 Bit,Shared Memory,我希望在C\Linux中使用共享内存段进行一些IPC 我继续像平常一样创造它: typedef struct { int a[2]; } shm_segment; 最后一行是它中断的地方,在编译时它只给出一个: Warning cast to pointer from integer of a different size. 从我之前所做的工作来看,这段代码在32位机器上完美运行(没有警告)(没有测试完全相同的代码,但相同),但在我的64位机器上,它在编译时给出了这条警告 在运行时

我希望在C\Linux中使用共享内存段进行一些IPC

我继续像平常一样创造它:

typedef struct {
    int a[2];
} shm_segment;

最后一行是它中断的地方,在编译时它只给出一个:

Warning cast to pointer from integer of a different size.
从我之前所做的工作来看,这段代码在32位机器上完美运行(没有警告)(没有测试完全相同的代码,但相同),但在我的64位机器上,它在编译时给出了这条警告

在运行时,它会出现故障。 根据我所做的研究,我相信从一个空*到我的指针的转换会弄乱指针,这是由64位原因造成的


你知道我怎样才能治好这家伙吗?或者是什么原因造成的?

听起来您缺少正确的
shmat()
声明,因此编译器假设它返回
int

确保你有

#include <sys/shm.h>
#包括

在您的include中。

听起来您缺少正确的
shmat()
声明,因此编译器假设它返回
int

确保你有

#include <sys/shm.h>
#包括

在您的include中。

删除强制转换并包含适当的标题:

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#包括
#包括
#包括

摆脱强制转换并包含适当的标题:

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#包括
#包括
#包括

当你可以使用
空值时为什么要使用
(void*)0
当你可以使用
空值时为什么要使用
(void*)0
当你可以使用
空值时为什么要使用
(void*)0
如果你一开始没有施放,你会得到更好的警告:)