C++ tinyxml2 空指针问题
问题
在自己的C++项目中接口参数是XML类型的,所以使用了tinyxml2
这个开源XML库,但是写好的动态库给别人调用时程序却闪退了,用日志里的参数试了一次,还真的会造成sigsegv segv_mapper
错误,这个错误常见于空指针。
但是自己明明对每个节点都进行了判空操作,怎么还会出现空指针呢?
XML示例如下
<ParamContext>
<Version>1.0</Version>
<Data>
<KeyItem>
<Type>1</Type>
<Identifier/>
</KeyItem>
</Data>
</ParamContext>
C++ 解析部分
const auto RootEle = doc.FirstChildElement("ParamContext");
if (RootEle == nullptr)return -1;const auto Version = RootEle->FirstChildElement("Version");
if (Version == nullptr)return -1;
std::string version = Version->GetText();const auto Data = RootEle->FirstChildElement("Data");
if (Data == nullptr)return -1;
const auto KeyItem = Data->FirstChildElement("KeyItem");
if (KeyItem == nullptr)return -1;const auto Type = KeyItem->FirstChildElement("Type");
if (Type == nullptr)return -1;
type = Type->IntText();
Identifier= KeyItem->FirstChildElement("Identifier");
if (Identifier == nullptr)return -1;
std::string identifier = Identifier->GetText();
原因
排查问题的时候怎么看都觉得自己的代码没有一点问题,最后试着打印日志发现了问题
if (Identifier->GetText() == nullptr) {LOGFMTI("Identifier为空");
}
上面那行日志输出了,所以问题就在于if (Identifier == nullptr)
只能判断这个XML标签存在,但是不能判断里面的内容是否为空,
传进来的参数<Identifier/>
这个标签的内容是空的,调用GetText()
方法得到结果也是空的.
在赋值前还需对GetText()
方法返回的内容做判空操作才行!
C++ tinyxml2 空指针问题相关推荐
- Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参
1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...
- c语言分段错误空指针,C语言空指针总结 - 祂的小哥哥的个人空间 - OSCHINA - 中文开源技术交流社区...
空指针就是指向不可访问区域的的指针,它的值为NULL,地址一般是内存的首地址.详情见代码1.2及其运行结果. NULL是标准库定义的等于0的常量符号. 不可访问和内存的划分有关.系统会在每个程序被调用 ...
- python 空指针_python 空指针
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 解压后依次执行以下命令安装 sdk. $ cd tencentcloud-sdk ...
- 关于空指针(指针指向为NULL)和void类型的指针的理解
正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1) ...
- [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html 由于windows环境下测试不稳定,博主选择在linux下进行的测试! Qt - ...
- 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释
1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...
- SpirngMVC jsp页面空指针
SpirngMVC jsp页面空指针 ,这个错误基本上是jar包冲突,我看网上很多的方案 <dependency><groupId>javax.servlet</grou ...
- SpringMVC @autowrid注入空指针
今天突然遇到空指针的问题 SpringMVC 项目出现了@Autowrid突然出现了空指针的问题 @Autowired private IGfGoodsInfoChose choseServi ...
- java.lang.NullPointerException空指针问题
对于一个Android新手而言遇见空指针问题是在所难免的.比如在调试时一开程序就出现"很抱歉!'XXX'已停止运行!"这是空指针的一种表现. 为什么会出现空指针? 所谓空指针异常, ...
最新文章
- WIN8.1 PRO RTM VOL.2013.09.18
- 内核管理实战之虚地址转换为物理地址
- Qt Creator指定环境设置
- 在Simplicity Studio下创建适用于EFR32的工程项目
- 一键移除所有权限密码,不到1MB!
- 利用微信的weui框架上传、预览和删除图片
- 明科在线客服系统PHP_在线客服系统的标准功能有哪些
- mysql去重取最大值,逻辑类似oracle的over(partition by)函数
- java package 目录_修改jar包package目录结构操作方法
- 基于JAVA+SpringMVC+Mybatis+MYSQL的微信小程序图书借阅管理系统
- POJ 2975 Nim(博弈论)
- java盛最多水的容器_Leetcode刷题java之11. 盛最多水的容器(top100)
- 计算机网络:常见的网络拓扑结构
- 飞鹤、贝因美、君乐宝们的难题:新生儿人口减少、育儿知识的变化
- 巴特沃斯滤波器 python代码
- [连载2]互联网究竟是什么怪物…他们不愿公开真正秘密...
- 腾讯云主机部署hexo博客
- 微信小程序基础而重要语法整理总结(数据绑定、运算表达式、循环渲染、条件渲染、事件绑定(传参))
- 期刊以及会议的CCF类别查询方法
- 如何扎实的学好ABAP?我的个人经验