共享内存使用结构体指针core
代码如下:
结构体定义如下:
typedef struct
{
int ctrlRunShmNum;
CreCtrlRun crectrlrun[1024*1024];
int ctrlTypeNum;
CreCtrlType cretrltype[MAXCRECTRLTYPENUM];
RegionMeasure regionMeasure[MAXALARMREGIONNUM];
}CreCtrlRunShm;
CreCtrlRunShm * publicGetCtrlTypeShm()
{
int shmid;
key_t shmkey;
CreCtrlRunShm *shmp;
DEBUGLOG(CLIENT_LOG, "publicGetCtrlTypeShm begin\n");
/* 获得共享内存的ID号 */
if((shmkey = getCtrlRunShmKey()) < 0)
{
errLog(" getCtrlRunShmKey err!%s%d [%d|%d|%s]\n", __FILE__, __LINE__, shmkey, errno, strerror(errno));
return NULL;
}
DEBUGLOG(CLIENT_LOG, "publicGetCtrlTypeShm 11[%d]\n", shmkey);
/* 获取共享内存 */
/*update by wangzhia 2014/3/26 11:15:23*/
if((shmid = shmget(shmkey, sizeof(CreCtrlRunShm), IPC_CREAT|0666)) < 0)
{
errLog(" shmget err!%s%d [%d|%d|%s]\n", __FILE__, __LINE__, shmid, errno, strerror(errno));
return NULL;
}
DEBUGLOG(CLIENT_LOG,"publicGetCtrlTypeShm 22[%d]\n",shmid);
/* 连接共享内存 */
shmp = NULL;
// shmp = (CreCtrlRunShm *)shmat(shmid, (CreCtrlRunShm *)0, 0);
shmp = (CreCtrlRunShm *)shmat(shmid, NULL, 0);
if((int)shmp == -1)
{
errLog(" shmat err22!%s%d [%d|%s]\n", __FILE__, __LINE__, errno, strerror(errno));
return NULL;
}
printf("get shmp===[%x]\n",shmp);
/*printAlarmType(CLIENT_LOG, "66666", shmp, '0'); */
DEBUGLOG(CLIENT_LOG, "publicGetCtrlTypeShm end\n");
printf("%d\n",shmp->ctrlRunShmNum);
return (CreCtrlRunShm *)shmp;
}
红色字体部门在函数执行时异常core掉,高手帮忙分析下吧.