使用memset要小心

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">     今天把程序重构了。运行一下,没想到程序到了退出的时候触发了一个 ASSERT 。看看栈信息,运行到了 CString 的析构函数:
  1. CString::~CString()
  2. //  free any attached data
  3. {
  4.     if (GetData() != _afxDataNil)
  5.     {
  6.         if (InterlockedDecrement(&GetData()->nRefs) <= 0)
  7.             FreeData(GetData());
  8.     }
  9. }

  10. _AFX_INLINE CStringData* CString::GetData() const
  11.     { ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }

  12. class ImageItem
  13. {
  14. public:
  15.     ImageItem();
  16.     ~ImageItem();
  17.     unsigned int id;
  18.     unsigned int x;
  19.     unsigned int y;
  20.     CString filename;
  21.     HDC hdc;
  22.     BITMAP bmp;
  23.     HBITMAP hbmp;
  24.     HBITMAP hOldBmp;
  25. };
  26. class ImageList
  27. {
  28. public:
  29.     ImageList();
  30.     ~ImageList();
  31.     ImageItem images[128];
  32.     int m_imageCount;
  33. };

  34. ImageList::ImageList()
  35. {
  36.     memset( images, 0, sizeof(images) );
  37.     m_imageCount = 0;
  38. }

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">         m_pchData 竟然等于 NULL ,怎么想也不明白。然后找新春帮忙看,原来是 ImageList 的构造函数里将 CString memset 了,编译期自然不会报错,而这个错误到了析构的时候才被发现。真是搞笑。看来以后要memset的时候要小心点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值