1.现象:程序中调用DLL中的某个函数f,但是断点跟踪,却调用了函数g而不是f
经调试,在call eax这条汇编语句中,查出函数地址就是g的地址;而f和g的地址只差4个字节;
于是检查DLL头文件,找出了原因:dll和h文件不匹配
2.现象:某个对象内有一个map成员,后来在某个地方遍历该map时抛出了异常。
经调试,发现该map已经被损坏,内部的头指针为0;
于是在该对象的map成员前后各加了一个char变量,再调试,当然还是抛异常,但是char变量都没有被修改,
排除了内存越界写坏的可能;
再测试。。在构造函数中将char变量设置为'a',析构函数中设置为'b';
发现当抛出异常的时候,char变量值为'b';这显然是一个已经析构了的对象;
原因:该类对象使用了对象池,当对象已经被归还给对象池之后(析构、但内存不会归还给OS),在程序其它地方仍然还在被引用,所以出现了异常。