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'已停止运行!"这是空指针的一种表现. 为什么会出现空指针? 所谓空指针异常, ...
最新文章
- linux 系统创建ora文件,手动创建oracle数据库
- 线性代数之矩阵标准型的求法
- 2007年50种方式将改变你生活
- 基于数据库的分布式锁实现
- OpenCV、OpenCL、OpenGL、OpenPCL
- 有限元笔记02:第三章
- 【HTML】HTML5中的Web Notification桌面通知
- python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)...
- fstab自动挂载_Linux系统挂载硬盘详解
- 简单 黑苹果dsdt教程_小米Ruby笔记本安装98%完美黑苹果教程
- 【百度地图API】圣诞节里不会迷路的麋鹿——驾车导航
- matlab内存管理工具,[转载]MATLAB内存管理
- 比特币一种点对点的电子现金系统是哪一年诞生的_庆比特币诞生12周年|带你回顾比特币的前世今生...
- 使用PS软件修改图片的尺寸
- 如何通过阿里云APP进行域名备案?阿里云备案流程需要多久?
- 了解 Qt 绘图设备QPixmap、QBitmap、QImage和 QPicture
- 极路由通过SSH添加静态路由表之后无法跳转的问题
- 怎么判断是显卡不行了还是CPU不行了?
- springboot中使用Mybatis_plus
- 正则:匹配以某字符串开头或不以某字符串开头的字符串
热门文章
- python利用selenium实现自动登陆网页下载内容
- iis里运行php_IIS PHP,让IIS支持php语言,IIS下配置php运行环境教程图解
- 英国英语和美国英语差别(三)
- 解决定位螺丝孔连接铜皮问题
- 【C 语言之项目实战】判断闰年及计算天数(详细版)
- 知识图谱中的 Ontology(本体论)
- C# 多线程四:互斥量Mutex的简单理解与运用
- 前后端分离之评论功能前端(1)——django+mysql+vue+element+axios
- SAP 自动编号工具【SNRO】
- ubuntu14.04修改PATH环境变量