核心提示:1. 参数未初始化(变量在未使用前就进行初始化)。 VC在Debug下,会将所有栈上的内存初始化为0xCCCCCCCC(其实是一条中断指令INT 3,会调用默认的异常处理程序,参看《天书夜读》),Re...
1. 参数未初始化(变量在未使用前就进行初始化)。
VC在Debug下,会将所有栈上的内存初始化为0xCCCCCCCC(其实是一条中断指令INT 3,会调用默认的异常处理程序,参看《天书夜读》),Release版本中该将不会存在。
2. 访问了已经删除的对象。
养成对象删除后就赋为NULL的好习惯。Delphi中使用FreeAndNil,VC中使用宏:
#define FREEANDNIL(P) if(P) {delete (P); (P) = NULL;}
3. 访问了错误的地址。
使用IsBadReadPtr,可以检查读写越界。
4. 调用栈被破坏。
主要原因是调用惯例不同,异常情况未加保护引起。
5. DLL和主程序使用不同的内存管理器。
Delphi中需要use ShareMem; VC中DLL操作界面需要使用切换模块的宏。
6. 多线程之间的同步问题。