使用memset要小心
来源:互联网 发布:明月心捏脸数据 编辑:程序博客网 时间:2024/04/29 14:36
今天把程序重构了。运行一下,没想到程序到了退出的时候触发了一个ASSERT。看看栈信息,运行到了CString的析构函数:
- CString::~CString()
- {
- if (GetData() != _afxDataNil)
- {
- if (InterlockedDecrement(&GetData()->nRefs) <= 0)
- FreeData(GetData());
- }
- }
- _AFX_INLINE CStringData* CString::GetData() const
- { ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }
- class ImageItem
- {
- public:
- ImageItem();
- ~ImageItem();
- unsigned int id;
- unsigned int x;
- unsigned int y;
- CString filename;
- HDC hdc;
- BITMAP bmp;
- HBITMAP hbmp;
- HBITMAP hOldBmp;
- };
- class ImageList
- {
- public:
- ImageList();
- ~ImageList();
- ImageItem images[128];
- int m_imageCount;
- };
- ImageList::ImageList()
- {
- memset( images, 0, sizeof(images) );
- m_imageCount = 0;
- }
m_pchData竟然等于NULL,怎么想也不明白。然后找新春帮忙看,原来是ImageList的构造函数里将CString给memset了,编译期自然不会报错,而这个错误到了析构的时候才被发现。真是搞笑。看来以后要memset的时候要小心点。