验证实例的有效性与类型的判断

2023-11-01

我们常常会用到指针变量,指针只有赋值以相应的实例才有意义,
怎么判断指针引用实例的有效性是我们经常面对的一个问题.我现在
只知道两种方法,列举如下
1:
ASSERT_VALID(pMyObject);

ASSERT_VALID 要判断的类必须是CObject的继承类,判断指针对于它的类型有效性

2:
使用AfxIsValidAddress()
int* pI = new int;
BOOL bValid = AfxIsValidAddress(pI, sizeof(int));
delete pI;
pI = NULL;          // 删除后置空是个好习惯

如果用MFC
AfxIsValidAddress判断地址是否在本进程内
AfxIsMemoryBlock判断地址内存是否new申请的,大小是否合适。
否则
__try{
}
__except(){

}
其实有个常用的方法就是
指针不用的时候置0,那么就可以简单的用ASSERT()来判断真假,来粗鲁的判断指针的有效性

有时候我们想知道位置数据的类型,我只知道两种方法
1:
CAge* pcage = new CAge( 21 );
ASSERT( pcage!= NULL )
ASSERT( pcage->IsKindOf( RUNTIME_CLASS( CAge ) ) )

ASSERT不能判断指针相对于它的类型有效性,但可以进行类型的判断.也就是说在调试的时候
ASSERT_VALID(pObject)
如果pObject指向的对象不合法时会弹出断言错误对话框。
ASSERT(bValue)
在bValue为假时会弹出断言错误对话框。

2:
void *pObject;
//得到外部数据的指针,但不知道是指向什么对象类型的指针
MyClass *pMyClass = dynamic_cast<MyClass*>(pObject);
if(NULL == pMyClass)
{
 //pObject不能指向一个MyClass对象
}
else
{
  //pObject被安全的转换成了MyClass对象
}
dynamic_cast主要是进行强制数据转换,但是可以利用其判别类型的能力,
如果指针是无效指针,弹出断言错误对话框。


对应以上问题的解决肯定还有更好的方法,希望互相探讨!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证实例的有效性与类型的判断 的相关文章

随机推荐

  • STM32 Flash详解

    本文将根据ST官方Flashprogramming manual 文档编号 PM0059 讲解STM32F207内部Flash编程 01 概述 这里的flash是指STM32F207内部集成的Flash Flash存储器有以下特点 最大1M
  • opencv入门Vec3f

    Vec3f表示的是3通道float类型的 Vect 就相当于3通道float类型的图像 这是其中一个具体化 解释可以从源代码中看出来 下面给出一个具体的例子 Vec3f point Vec3f 10 10 3 2 Float 3 compo
  • Fiddler+夜神模拟器对安卓app进行抓包,安卓9,安装Magisk和LSPosed

    效果图 安装教程 1 下载夜神模拟器 国际版 2 下载Fiddler 1 配置fiddler允许监听到https Tools gt Options gt HTTPS 2 配置fiddler允许远程连接 Tools gt Options gt
  • 超级好用的思维导图软件XMind

    超级好用的思维导图软件XMind 今天和大家分享一款我一直使用的思维导图制作软件XMind 关于 思维导图制作的软件和网站是非常非常多的 可以说上网一搜的话一大把 我推荐这款 XMind是我自己搜集整理各种信息以及自己的实际使用后感觉特别喜
  • PyCharm配置anaconda环境

    PyCharm配置anaconda环境 PyCharm是一款很好用很流行的python编辑器 Anaconda是专注于数据分析的Python发行版本 包含了conda Python等190多个科学包及其依赖项 Anaconda通过管理工具包
  • coherence

    coherence Coherence是 Oracle为了建立一种高可靠和高扩展 集群计算的一个关键部件 集群指的是多于一个应用服务器参与到运算里 Coherence的主要用途是共享一个应用的对象 主要是java对象 比如Web应用的一个会
  • MAC电脑出现 .bin/webpack-dev-server permission denied 错误解决方法

    以前同事 新买的mac电脑 拉取项目后 npm i 安装了所有依赖 但是执行npm run dev 报错 MAC电脑出现 bin webpack dev server permission denied 提示权限问题 这样解决 sudo n
  • DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

    目录 1 概述 2 简洁高效且经济的 ChatGPT 训练与推理体验 使用 DeepSpeed Chat 的 RLHF 示例轻松训练你的第一个 类ChatGPT 模型 想尝试不同的模型大小和配置 轻松实现 利用 DeepSpeed Chat
  • 静态代码检查工具 - SourceInsight_Scan 使用指南

    静态代码检查工具 SourceInsight Scan 使用指南 静态代码检查是软件开发过程中非常重要的一环 它可以帮助开发人员发现潜在的代码问题 提高代码质量和可维护性 本文将介绍一款名为SourceInsight Scan的静态代码检查
  • 【100天精通python】Day22:字符串常用操作大全

    目录 专栏导读 一 字符串常用操作 1 拼接字符串 2 计算字符串长度 3 截取字符串 4 分割合并字符串 5 检索字符串 6 字母的大小写转换 7 去除字符串的空格和特殊字符 8 格式化字符串 二 字符串编码转换 2 1 使用encode
  • 管理与维护samba服务器,配置与管理samba服务器

    安装Samba服务器 环境 CentOS 8 boot 64 位 window 10 64 位 samba软件包 检查是否安装了samba软件包 rpm qa grep samba 没有安装软件包 则使用yum命令安装 yum clean
  • 怎样在VMware Workstation中安装Linux系统

    安装步骤 一 创建虚拟机 1 新建虚拟机 典型 下一步 2 稍后安装操作系统 下一步 3 Linux 下一步 4 客户机命名 必须是英文名 自定义浏览存放的位置 下一步 5 设置磁盘大小 拆分多个文件 下一步
  • 公链分层要怎么设计?

    比特币把人类在密码学和计算机工程中的应用融合到了一起 全球矿工 开发者们对比特币有着十分浓厚的兴趣 他们都在比特币提供的结构思考中完成创新和应用 比特币网络的改良的一个最好例子就是以太坊 而EOS等其余公链的出现则在更多的途径上为区块链技术
  • 基于PiggyMetrics微服务搭建的分布式系统

    1环境 2工具安装 3docker运行 1 docker安装完成后桌面出现Docker Quickstart Terminal和Kitematic Alpha两个快捷方式 2 修改VirtualBox中docker虚拟机的内存和处理器核数
  • Linux运维常用工具软件

    1 远程桌面连接 TigerVNC Xshell 2 FTP服务和客户端 FileZilla 将客户端的文件上传到服务器上 客户端可以使用免费的FileZilla Client 支持多线程上传文件 3 硬件检测 CPU Z CPU Z是一款
  • 2022-12-11 leetcode与蓝桥刷题情况

    一 leetcode题目 今天的leetcode是写的周赛题目 昨天状态不好 摸鱼一天 1 数组中最长的方波 题目描述 给你一个整数数组 nums 如果 nums 的子序列满足下述条件 则认为该子序列是一个 方波 子序列的长度至少为 2 并
  • fullcalendar v6的使用记录

    翻了翻百度 教程很多都过时了 方法都废弃了 这次是以V6版本CDN方式使用说明 文档地址 配置 var calendarConfig 加载 loading function load 可以控制页面的加载状态 app instance dat
  • ctfshow-萌新-web3( 利用intval函数的特性配合联合注入获取网站敏感信息)

    ctf show 萌新模块 web3关 此关卡考察的是 intval 函数的特性 以及SQL注入漏洞的利用 首先需要利用 intval 转换字符串的特性绕过校验 而后利用联合注入获取数据库中的敏感信息 从而获取flag 源码中过滤了or 加
  • Linux内核编译和安装

    下载对应的linux内核源码 The Linux Kernel Archives 2 传输到要安装内核的服务器系统中的对应根目录下 usr src scp p 端口号 源文件 username IP地址 例如 scp p 8090 linu
  • 验证实例的有效性与类型的判断

    我们常常会用到指针变量 指针只有赋值以相应的实例才有意义 怎么判断指针引用实例的有效性是我们经常面对的一个问题 我现在 只知道两种方法 列举如下 1 ASSERT VALID pMyObject ASSERT VALID 要判断的类必须是C