前几天的遇到的一个错误,引以为戒

今天继续调试昨天的错误 [在导出类中使用CPtrList对象作为私有成员,
想要释放CPtrList中保存的对象的指针时,老是出现错误,
Windows has triggered a breakpoint in zlgLogic.exe.


This may be due to a corruption of the heap, which indicates a bug in zlgLogic.exe or any of the DLLs it has loaded.


This may also be due to the user pressing F12 while zlgLogic.exe has focus.


The output window may have more diagnostic information.
]
在网上查了很久,一开始根据Msdn上的解释,好像是DLL/EXE间都对同一个类有定义
,假如在A定义了类C,B中也定义了类C,类C包含静态变量M_static,B使用A中
导出的C类的对象,原本想改变A地址空间中的C的静态变量,但是在B空间使用,
只能访问到B空间的C的静态变量,所以出现问题。
但是我再CPtrList类的头文件中(afxcoll.h),却没有看到任何静态成员变量。
所以我觉得很大程度不会是这个问题。


今天用了一整天仍然想不出来,后来忽然想到我为什么不看看内存的变化,一看
才知道我使用了memset函数将pUserData置0,殊不知在字节数那里顺手写成
sizeof(UINT32)*Len,明明是UINT8的数据却要写成UINT32,怪不得出错。
这件事告诉我,写程序时每一步都要经过脑子,不要顺手,以免因一时
之失造成大量时间的损失,而且要掌握多一点的调试方法和技巧,假如我一开始

就取找内存,说不一定这一天就不会被浪费了。


你可能感兴趣的:(前几天的遇到的一个错误,引以为戒)