问题

在自己的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 空指针问题相关推荐

  1. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  2. c语言分段错误空指针,C语言空指针总结 - 祂的小哥哥的个人空间 - OSCHINA - 中文开源技术交流社区...

    空指针就是指向不可访问区域的的指针,它的值为NULL,地址一般是内存的首地址.详情见代码1.2及其运行结果. NULL是标准库定义的等于0的常量符号. 不可访问和内存的划分有关.系统会在每个程序被调用 ...

  3. python 空指针_python 空指针

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 解压后依次执行以下命令安装 sdk. $ cd tencentcloud-sdk ...

  4. 关于空指针(指针指向为NULL)和void类型的指针的理解

    正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1) ...

  5. [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml

    转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html 由于windows环境下测试不稳定,博主选择在linux下进行的测试! Qt - ...

  6. 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...

  7. SpirngMVC jsp页面空指针

    SpirngMVC jsp页面空指针 ,这个错误基本上是jar包冲突,我看网上很多的方案 <dependency><groupId>javax.servlet</grou ...

  8. SpringMVC @autowrid注入空指针

    今天突然遇到空指针的问题 SpringMVC 项目出现了@Autowrid突然出现了空指针的问题 @Autowired     private IGfGoodsInfoChose choseServi ...

  9. java.lang.NullPointerException空指针问题

    对于一个Android新手而言遇见空指针问题是在所难免的.比如在调试时一开程序就出现"很抱歉!'XXX'已停止运行!"这是空指针的一种表现. 为什么会出现空指针? 所谓空指针异常, ...

最新文章

  1. WIN8.1 PRO RTM VOL.2013.09.18
  2. 内核管理实战之虚地址转换为物理地址
  3. Qt Creator指定环境设置
  4. 在Simplicity Studio下创建适用于EFR32的工程项目
  5. 一键移除所有权限密码,不到1MB!
  6. 利用微信的weui框架上传、预览和删除图片
  7. 明科在线客服系统PHP_在线客服系统的标准功能有哪些
  8. mysql去重取最大值,逻辑类似oracle的over(partition by)函数
  9. java package 目录_修改jar包package目录结构操作方法
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的微信小程序图书借阅管理系统
  11. POJ 2975 Nim(博弈论)
  12. java盛最多水的容器_Leetcode刷题java之11. 盛最多水的容器(top100)
  13. 计算机网络:常见的网络拓扑结构
  14. 飞鹤、贝因美、君乐宝们的难题:新生儿人口减少、育儿知识的变化
  15. 巴特沃斯滤波器 python代码
  16. [连载2]互联网究竟是什么怪物…他们不愿公开真正秘密...
  17. 腾讯云主机部署hexo博客
  18. 微信小程序基础而重要语法整理总结(数据绑定、运算表达式、循环渲染、条件渲染、事件绑定(传参))
  19. 期刊以及会议的CCF类别查询方法
  20. 如何扎实的学好ABAP?我的个人经验

热门文章

  1. springboot版本控制
  2. 夺命雷公狗—玩转SEO---20---K站
  3. 来到成都感受到人情味很重,喜欢我们网优谷的老师!
  4. 毛哥的快乐生活(2) 毛哥的学生时代
  5. 毛哥的快乐生活(12) 邮件记录里的css科普
  6. 女性服务社群产品设计
  7. Spring MVC面试题(2020最新版)
  8. 铁匠smith_铁匠的制作:动画,相机效果,音频/视频
  9. ubuntu14.04修改PATH环境变量
  10. Android 桌面小组件