结构体向量的复制

blpluto 2010-01-14 05:06:09
我写了一个结构体,如下:
struct GanttInfo
{
GanttInfo():isGroup(FALSE), nextTaskNo(-1){};
BOOL isGroup; //是否有子任务
int taskNo; //作业编号
int nextTaskNo; //下一工作ID
COleDateTime startDate; //开始时间
COleDateTime FinishDate; //完成时间
double progress; //进度
CString frontTask;

bool operator == (const GanttInfo &rhs)
{
return (nextTaskNo == rhs.nextTaskNo);
}


声明一个结构体向量vector<GanttInfo> m_ganttInfo;
m_ganttInfo中已经填充若干数据。

现在我又再次声明一个向量
vector<GanttInfo> m_tempInfo;
进行拷贝
tempInfo.resize(m_gantInfo.size());

memcpy(&tempInfo[0], &m_gantInfo[0], m_gantInfo.size()*sizeof(GanttInfo));

结果这段代码在运行时正常,在退出是,发现出现异常

那么,拷贝这种结构体向量怎么进行呢?memcpy那里错了吗?


...全文
182 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
strcut里有函数的话,你最好就别用memcpy了。

blpluto 2010-01-14
  • 打赏
  • 举报
回复
谢谢大家了, 问题解决了,结贴
blpluto 2010-01-14
  • 打赏
  • 举报
回复 1
[Quote=引用 8 楼 macrojj 的回复:]
我觉得是CString 加上浅拷贝的原因
[/Quote]

明白了,这的确是CString的问题,我修改了一下,如果吧CString改为LPCTSTR的确是正确的
macrojj 2010-01-14
  • 打赏
  • 举报
回复
看看由于CString赋值 而产生的2个指针指向同一地址的错误吧。
http://hi.baidu.com/lj_jjinl/blog/item/2bfd5fb5c750c47b8ad4b22b.html
macrojj 2010-01-14
  • 打赏
  • 举报
回复
我觉得是CString 加上浅拷贝的原因
blpluto 2010-01-14
  • 打赏
  • 举报
回复
这种复制我知道了,我是想请教我这段代码中的复制,问题出现在那里呢,内存是怎么进行的
pengzhixi 2010-01-14
  • 打赏
  • 举报
回复
给GanttInfo定义赋值运算符,直接赋值
pady_pady 2010-01-14
  • 打赏
  • 举报
回复
你这个都不是结构了,它是真正的c++类
所以必需要重载=,构造,析构,拷贝函数的

用memcpy明显是浅拷贝问题,应该用operator = 的
pur_e 2010-01-14
  • 打赏
  • 举报
回复
直接vector <GanttInfo> m_tempInfo(m_gantInfo); 就是了

pur_e 2010-01-14
  • 打赏
  • 举报
回复
vector中有许多内部数据的,不是简单的数组,不能这么简单的copy,破坏结构了
blpluto 2010-01-14
  • 打赏
  • 举报
回复
哪我这段代码的问题在那里呢?
pengzhixi 2010-01-14
  • 打赏
  • 举报
回复
memcpy(&tempInfo[0], &m_gantInfo[0], m_gantInfo.size()*sizeof(GanttInfo));
既然是C++就不要用这个来拷贝了。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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