发现它不是nil,不知道怎么判断

解决方案 »

  1.   

    每次使用前先初始化, 定义后别忘记赋初值.还有一种方法, 判断是否合法(仅供参考):
    var
       dwStart, dwAddr, dwEnd: Longword;
    begin
       // 用内嵌汇编取变量的起始和末尾地址
       asm
          mov dwStart, ebp
          lea eax, <变量名>
          mov dwAddr, eax
          lea eax, dwEnd
          mov dwEnd, eax
       end;   // 根据变量的地址来判断是否合法
       if dwAddr < dwEnd then
          // 变量一般为有问题
       else if dwAddr < dwStart then
          // 变量是一个本函数的局部变量
       else if dwAddr = dwStart then
          // 变量肯定有问题, 因为此值为函数的开始处
       else if dwAddr < dwStart + ParamSize then
          // 变量为传值参数
       else
          // 变量为本函数外的变量
    end;