1 typedef struct CSS_REG_INFO
2 {
3 INT32 nSRVID; //固定服务ID, 存储服务ID
4 enumDISKROLETYPE nRole; //角色
5 TCHAR szIP[HMC_CHAR_128]; //服务IP
6 TCHAR szPermit_IP[HMC_CHAR_128];//允许登录的IP
7 INT32 nPermit_Port; //允许登录的端口
8 }*LPCSS_REG_INFO;
9
10 struct STORAGESVR
11 {
12 CSS_REG_INFO cssInfo;
13 std::list<DISK_REG_INFO> diskInfo;
14 };
15
16 typedef std::map<int, STORAGESVR> STORAGESVR_MAP;
17 STORAGESVR_MAP m_mapCSSInfo;
18
19 void CStoragePolicyMgt::_AddStorageSvr(LPCSS_REG_INFO pCSSRegInfo)
20 {
21 if (pCSSRegInfo == NULL)
22 {
23 return;
24 }
25 STORAGESVR storageSvr;
26 ZeroMemory(&storageSvr, sizeof(STORAGESVR ));
27 memcpy(&storageSvr.cssInfo, pCSSRegInfo, sizeof(CSS_REG_INFO));
28 m_mapCSSInfo[pCSSRegInfo->nSRVID]=storageSvr;
29
30 HMCDAL_GetRegDiskList(fnGetRegDiskCallback, this, pCSSRegInfo->nSRVID);
31 }
ZeroMemory(&storageSvr, sizeof(STORAGESVR ));
这行导致了内存越界, 在 m_mapCSSInfo[pCSSRegInfo->nSRVID]=storageSvr 操作时引起了一个无法预料的异常 "正在被停用的激活上下文不是最近激活的".
结构体加入了list对象后,自动转换为C++类, 内存布局已经不是简单的结构体内存模式, 已经不能用简单的memset等内存操作函数改变内存.