怎样判断内存越界呢?比如,用MessageBox输出进程的地址范围,和指针的地址比较,用来判断是否越界。这要如何实现呢?

解决方案 »

  1.   

    使用windows的结构化异常处理:
    //Exception filter:
    int ExcptFilter(int ExcptCode){
        return (  EXCEPTION_ARRAY_BOUNDS_EXCEEDED == ExcptCode
                ||STATUS_ACCESS_VIOLATION == ExcptCode);
    }
    __try{
        ....//你的代码
    }
    __except( ExcptFilter(GetExceptionCode() ) {
        PEXCEPTION_RECORD pER= GetExceptionInformation()->ExceptionRecord;
        TCHAR szMsg[1024];
        _stprintf(szMsg, TEXT("进程的地址:0x%08X处发生访问越界错误.\r\n"), 
                  pER->ExceptionAddress);
        if (pER->ExceptionCode == STATUS_ACCESS_VIOLATION) 
             _stprintf(_tcschr(szMsg, TEXT('\0')),
                       TEXT("这个错误在试图对地址0x08X进行%s的时候发生。",
                       pER->ExceptionInformation[1],
                       (pER->ExceptionInformation[0]?TEXT("写"):TEXT("读"))
             );
         }     MessageBox(NULL, szMsg, "内存错误", MB_OK|MB_ICONSTOP);
    }
      

  2.   

    IsBadWritePtr(p)判断p是不是有效