vector问题?

lang14 2016-08-11 11:25:56
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不同


为什么执行push_back之后,再取出来,里面的pData指针变化了呢,里面的值也没有了
...全文
146 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

g_sData.strName=_T("name");
 
g_veData.push_back(g_sData);
push_back后有没有做别的改变vector里面的g_sData.strName的内容操作? 如果有,很可能就是改变内容引起的。 Cstring这块做的不太好。 我之前遇到过这类的问题,不过不是vector而是MFC的CArray 如果要改动就需要先取出来,改动后删除原来的再放回去。
lang14 2016-08-12
  • 打赏
  • 举报
回复
引用 3 楼 dingxz105090 的回复:
完全复制了楼主的代码,VS2008测试没有楼主说的问题
这个代码确实没有问题,不过问题已经解决了,谢谢了
lang14 2016-08-12
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
你确定g_sData.pData的值与AfterData.pData的值不同?你Debug下看了没有?
这个是接手别人代码的,其实他定义的是class,不是struct,理伦上是应该是一样的,后面找到了原因,因为他这个class里面有个拷贝的构造函数,里面自动为pData,new了内存,所以每次我压入vector就会执行这个拷贝构造函数,所以pData的地址变了,数据也没了
凌乱哥 2016-08-11
  • 打赏
  • 举报
回复
完全复制了楼主的代码,VS2008测试没有楼主说的问题
Eleven 2016-08-11
  • 打赏
  • 举报
回复
你确定g_sData.pData的值与AfterData.pData的值不同?你Debug下看了没有?
sevancheng 2016-08-11
  • 打赏
  • 举报
回复
g_veData.push_back(g_sData); g_sData 是全局的

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧