- 论坛徽章:
- 0
|
下面这段代码红字部分在redHat9下报段错误,没找出原因,哪位达人给指点指点,谢先啊。
同时,这段代码如果放在aix下编译运行并不报错,这就更让我迷惑了/ 有哪些地方写错了吗
参数:name是传入的字符串
int isNameAlreadyExist(char *name)
{
char *shm = NULL , *p_Cur= NULL;
int varBlockIndex = -1 ;/*作为返回值,记录保存时的首块索引*/
int i=0 ,ret = -1;
stShmManager *pManager = NULL ;
stShmItem *pItem = NULL ;
shm = (char*)shmat(g_shmId,0,0);/*g_shmId是一个全局变量,由 shmget得到*/
if ((int)shm == -1)
{
printf("连接共享内存错误.\n");
shmdt(shm);
exit(-1);
}
pManager = (stShmManager *)shm;
for(i = 0 ; i < pManager->varBlockCnt ; i++)
{
pItem = (stShmItem*)(shm + BLOCKSIZE*pManager->headerBlockCnt +i*BLOCKSIZE);
if (0 == pItem->flag )
{
continue ;
}
else
{
if (0 == pItem->subIndex)
{
if(strcmp(name,pItem->name)==0)
{
ret = pItem->index ;
printf("shm = %d \n",shm);/*这句可以执行,shm的结果与*/
shmdt(shm);/*在redHat9下本句报错,提示段错误。但在aix下本句可以通过,不知是什么原因??*/
printf("428");
return(ret);
}
else
{
continue;
}
}
else
{
continue;
}
}
}
if (i >= pManager->varBlockCnt)
{
shmdt(shm);
return(-1);
}
shmdt(shm);
return(-1);
} |
|