16,548
社区成员




struct
{
CString strName;
void *pData;
//还有其他变量。。。
}ST_DATA;
ST_DATA g_sData;
vector<ST_DATA> g_veData;
//上面的在全局声明的
//下面的代码都是在一个函数体里面的
BYTE bData[3]={0x12,0x34,0x56};
g_sData.pData=new BYTE[256];
memset(g_sData.pData,0,256);
memcpy(g_sData.pData,bData,sizeof(bData));
g_sData.strName=_T("name");
g_veData.push_back(g_sData);
//执行push_back后,把值取出来
ST_DATA AfterData;
AfterData=g_veData.at(0);
//AfterData.strName 是name,这个是正确的,地址跟g_sData.strName地址相同
//AfterData.pData 没取到值,这个为什么呢,地址跟g_sData.pData不同
g_sData.strName=_T("name");
g_veData.push_back(g_sData);
push_back后有没有做别的改变vector里面的g_sData.strName的内容操作?
如果有,很可能就是改变内容引起的。
Cstring这块做的不太好。
我之前遇到过这类的问题,不过不是vector而是MFC的CArray
如果要改动就需要先取出来,改动后删除原来的再放回去。