问题

在自己的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. linux 系统创建ora文件,手动创建oracle数据库
  2. 线性代数之矩阵标准型的求法
  3. 2007年50种方式将改变你生活
  4. 基于数据库的分布式锁实现
  5. OpenCV、OpenCL、OpenGL、OpenPCL
  6. 有限元笔记02:第三章
  7. 【HTML】HTML5中的Web Notification桌面通知
  8. python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)...
  9. fstab自动挂载_Linux系统挂载硬盘详解
  10. 简单 黑苹果dsdt教程_小米Ruby笔记本安装98%完美黑苹果教程
  11. 【百度地图API】圣诞节里不会迷路的麋鹿——驾车导航
  12. matlab内存管理工具,[转载]MATLAB内存管理
  13. 比特币一种点对点的电子现金系统是哪一年诞生的_庆比特币诞生12周年|带你回顾比特币的前世今生...
  14. 使用PS软件修改图片的尺寸
  15. 如何通过阿里云APP进行域名备案?阿里云备案流程需要多久?
  16. 了解 Qt 绘图设备QPixmap、QBitmap、QImage和 QPicture
  17. 极路由通过SSH添加静态路由表之后无法跳转的问题
  18. 怎么判断是显卡不行了还是CPU不行了?
  19. springboot中使用Mybatis_plus
  20. 正则:匹配以某字符串开头或不以某字符串开头的字符串

热门文章

  1. python利用selenium实现自动登陆网页下载内容
  2. iis里运行php_IIS PHP,让IIS支持php语言,IIS下配置php运行环境教程图解
  3. 英国英语和美国英语差别(三)
  4. 解决定位螺丝孔连接铜皮问题
  5. 【C 语言之项目实战】判断闰年及计算天数(详细版)
  6. 知识图谱中的 Ontology(本体论)
  7. C# 多线程四:互斥量Mutex的简单理解与运用
  8. 前后端分离之评论功能前端(1)——django+mysql+vue+element+axios
  9. SAP 自动编号工具【SNRO】
  10. ubuntu14.04修改PATH环境变量