判断野指针,无效指针
该方法仅适用于windows
检查是否可读:IsBadReadPtr
检查是否可写:IsBadWritePtr
检测是否代码段:IsBadCodePtr
函数原型: BOOL IsBadReadPtr(CONST VOID *lp,UINT_PTR ucb); 参数: lp 表示要检查的内存指针 ucb 要检查的内存块的大小 返回: 如果调用进程有权限访问该内存,返回0 否则,返回非0 说明: 该函数检查调用进程是否有读取指定内存的内容的权限,微软提供的32位操作系统下的API
BOOL IsBadWritePtr( LPVOID lp, UINT ucb );
验证调用进程具有写访问权限的指定范围的内存。
lp 第一个字节的内存块的指针。
ucb 指定的大小,单位为字节的内存块。如果此参数为零,则返回值为零。
返回值
零 调用进程在指定的内存范围具有写访问权限的所有字节。
非零 调用进程在指定的内存范围内没有写访问权限的所有字节。
// 判断内存是否可读
1 int is_invalid_ptr(void* memory_pointer) 2 { 3 if (NULL == memory_pointer) { 4 return 1; 5 } 6 7 __try { 8 return *((int*)memory_pointer) ? 0 : 0; 9 } 10 __except (1) { 11 return 1; /** exception_code(); STATUS_ACCESS_VIOLATION*/ 12 } 13 }
参考: http://blog.chinaunix.net/uid-20680966-id-1896395.html