我希望在C \ Linux中使用共享内存段来进行一些IPC。
我继续像平常一样创建它:
typedef struct {
int a[2];
} shm_segment;
...
shm_segment *shm;
int shm_id;
int shm_flags = IPC_CREAT | 0666
int shm_size = sizeof(struct shm_segment)
key_t key = 88899;
shm_id = shmget(key, shm_size, shm_flags); // ies this is in an if for error cheking but for example sake i omitted it
shm = (shm_segment*)shmat(shm_id, (void*)0, 0);
最后一行是它破坏的地方,在编译它只是给出一个:
Warning cast to pointer from integer of a different size.
从此之前我已经完成的代码在32位机器上完美运行(没有警告)(没有测试完全相同的代码,但是相同),但在我的64位上,它在编译时给出了这个警告。 / p>
并且在运行时会出现段错误。 从我已经完成的研究中我相信从无效*转换到我的指针会使指针混乱,从64位原因开始。
任何想法我怎么能解决这个家伙?或者是什么导致了它?
答案 0 :(得分:2)
听起来你错过了shmat()
的正确声明,所以编译器假设它返回int
。
确保你有
#include <sys/shm.h>
在您的包含中。
答案 1 :(得分:2)
摆脱演员表并包含正确的标题:
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>