CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问在剪贴板操作中,如何才能将自定义结构中的指针正确复制呢?

楼主lglabc(会飞的熊猫)2006-03-15 16:27:51 在 VC/MFC / 基础类 提问

使用传统的剪贴板操作  
   
  copy   如下:  
   
  //   先分配一块内存  
  MyCBStruct   *pData   =   new   MyCBStruct();  
  hMem   =   GlobalAlloc(GHND,   sizeof(MyCBStruct));  
  memcpy(GlobalLock(hMem),   (void*)pTmpData,   sizeof(MyCBStruct));  
  OpenClipboard  
  EmptyClipboard();  
  SetClipboardData  
  GlobalUnlock(hMem);  
  CloseClipboard();  
  //   将开始分配的内存释放  
  delete   pData;  
   
  paste   如下:  
  //   先分配一块内存  
  MyCBStruct   *pData   =   new   MyCBStruct();  
  OpenClipboard()    
  GetClipboardData  
  memcpy(pData,   GlobalLock(hMem),   sizeof(MyCBStruct));  
  GlobalUnlock(hMem);    
  CloseClipboard();  
  //   将开始分配的内存释放  
  delete   pData;  
   
  现在的问题是:如果我定义的结构   MyCBStruct   中没有指针的话,运行良好  
  但是,如果我的结构中有指针,而且该指针在构造函数中分配内存,在析构函数中释放内存的话,上面的程序就会出现错误。。。  
   
  原因是全局内存   hMem   中保存的是一个指针,其内容和   pData   的一样。  
  非指针变量在   memcpy   中执行了复制,但是指针变量仅仅把指针的地址进行了复制   (是不是就是常说的浅拷贝),所以当我   delete   pData;以后,全局内存   hMem   中的指针也就变成“野”指针了。  
   
  如果我不进行   delete   pData   的话就会造成内存泄露。  
   
  有没有什么办法来解决呢?  
  我现在认为不应该使用   memcpy,而是应该使用一个能执行深拷贝的复制过程函数。  
   
  高手指教,谢谢! 问题点数:88、回复次数:3Top

1 楼Mackz(在相互)回复于 2006-03-15 16:56:10 得分 88

拷贝的时候应该把成员指针中的数据一起拷贝,并且修改成员指针的值指向新的数据。一般可以提供一个成员函数完成这个功能,类似序列化。Top

2 楼lglabc(会飞的熊猫)回复于 2006-03-15 17:08:11 得分 0

我也正在这样做,  
  分配全局内存  
  GlobalAlloc(GHND,   sizeof(MyCBStruct));  
  然后我进行强制转换  
  (MyCBStruct*)GlobalLock(hMem);  
  最后我把指针数据逐个复制,问题在于我使用了   stl  
  std::list<DWORD>   m_listDW  
  转换过来的指针无法对   m_listDW   进行操作,观察显示,该链表好像没有初始化。。  
   
  其他简单的指针已经没有问题了。。  
   
  谢!  
  Top

3 楼lglabc(会飞的熊猫)回复于 2006-03-16 09:20:49 得分 0

ok  
   
  已经解决了  
   
  使用placement   new就可以了,虽然很麻烦。。  
   
  结帐Top

相关问题

  • 自定义结构的复制
  • 把一个字符串复制到剪贴板?
  • 怎样把一个字符串复制到剪贴板?
  • 有关文件复制和剪贴板的关系的问题
  • 如何使用剪贴板复制并粘贴呢?
  • 如何复制多种格式的数据到剪贴板?
  • c++如何实现复制到剪贴板?
  • 怎么将数据复制到剪贴板???
  • 在页面上如何实现复制内容到剪贴板?
  • 关于剪贴板(对象的复制、粘贴,而非String的复制、粘贴)

关键词

  • 指针
  • 内存
  • 函数
  • 拷贝
  • 结构
  • 数据
  • mycbstruct
  • hmem
  • pdata
  • 复制

得分解答快速导航

  • 帖主:lglabc
  • Mackz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo