首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

64位Linux shmat返回值被截断,该如何处理

2012-07-23 
64位Linux shmat返回值被截断共享内存的基本用法:shmgetshmat调用都没有问题对shmat做了封装,示意代码如下

64位Linux shmat返回值被截断
共享内存的基本用法:
shmget
shmat
调用都没有问题

对shmat做了封装,示意代码如下

C/C++ code
char* LinkShm(int shm_id, int flag){  char *shmptr;  shmptr = shmat(shm_id,NULL,flag);  return shm_ptr;}



然后调用返回的值,一直是错误的,调用代码如下:
C/C++ code
char* shmptr;shmptr = LinkShm(shm_id,0);



使用gdb调试发现,函数LinkShm()中的shmptr的值是对的,返回给调用者指针shmptr时shmat返回的64位地址,高位4字节给截断了,并且补上了0xffffffff,后面4个字节是正确地址的低位4字节。

直接调用shmat,即:

C/C++ code
char* shmptr;shmptr = shmat(shm_id,NULL,0);


依然是同样的错误。

想不通是什么原因。指针转换我也试过,一样的错误。

补充:
编译的时候出现警告:将整数值赋值给指针未做正确转换。(大致是这样,凭记忆)

[解决办法]
在调用前加上声明
C/C++ code
char* LinkShm(int shm_id, int flag);char* shmptr;shmptr = shmat(shm_id,NULL,0); 

热点排行
Bad Request.