内存操作错误的导致的 “0xC015000F 正在被停用的激活上下文不是最近激活的”

 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等内存操作函数改变内存.

posted @ 2012-12-11 14:29  流水不腐-户枢不蠹  阅读(2275)  评论(0编辑  收藏  举报