| 请教高高高手问题,关于memcpy() |
| [ 来源:ITWENKU 时间:2006-9-20 16:32:39 | 浏览:255人次
] |
| |
|
void CTIKUDlg::FormatTM() { timu *tm;
for(POSITION P = tmlist.GetHeadPosition();NULL!=P;) { timu tmtemp; tm = (timu*)(tmlist.GetAt(P)); memcpy(&tmtemp,tm,sizeof(timu)); //..... tmlist.GetNext(P);
}
}
上面程序做了删减,假设是可以正常运行的,里包含 timu 结构体
tmlist 是一个CObList对象,里面包含了N个timu结构体。
这里想做的工作,就是得到tmlist里得到每一个timu结构(指针为tm),然后通过memcpy把贴到临时的timu结构变量tmtemp里去,然后由tmtemp里修改。。之后再做些其他的
不过很有意思就是,当执行完了memcpy(&tmtemp,tm,sizeof(timu));句之后,通过短点,成功检查出了复制的结果正是我想要的,但是执行完tmlist.GetNext(P); tm中汉字都发生了变化,都变乱码了,而tmtemp当然生命周期结束了
我分析了一下午也没找到原因,后来怀疑是timu结构中的汉字使用的是CString保存的结果,但是具体 问题出现在哪里了,说不清,数字没问题,英文字符也不行了。
把GetNext(P);代码贴出来看看
timu结构中的汉字使用的是CString保存的结果? 因为CString内部存在一个buffer,所以做为你的timu结果的成员的话,就不能直接用memcpy了. 你需要为timu实现assignment operator(=)和copy constructor,以实现deep copy.
这个原则很我C++的书上都有讲.
memcpy 是纯拷贝内存, 如果含有指针等内容, 请使用深拷贝方式 ...
assignment operator(=) 或者是 copy constructor 均可 ...
因为指针拷贝, 指针直向的内容可能会被释放, 对于指针, 需要拷贝原指针的指向空间内容, 仅仅复制指针本身是不够的 ...
或者,你把 timu结构中的汉字使用的是CString 定义为静态的/全局的, 或者是常量方式存在整个程序生命期中 ...
|
|
 |
推荐文章 |
|