【吃一堑】vector的pop_back使用错误造成的core dump
来源:互联网 发布:js设置option选中 编辑:程序博客网 时间:2024/06/10 06:46
这个错误其实很简单,如果编码时注意的话根本就不会犯。
然而恰恰被我犯了,于是记下一笔。
someHeader.h
std::vector<SomeClass> m_someClass;
someSource.cpp
// code herem_someClass.pop_back();// other code here
就是一个出栈操作,这个操作在Windows下不会有问题,但是在linux下会core dump。
看coredump文件发现是在SomeClass的析构里当的。
经过定位最后发现是因为在linux下的pop_back()操作不管容器是否为空,如果vector存放的是非基本类型、非指针的类对象,那么pop_back之后会对这个弹出的对象进行析构。所以在空vector上进行弹出后会在一个错误的地址上进行对象的析构。
Windows上的行为则和linux不一样,不会coredump,具体这两个编译器的差别没有细看。这两者之所以有区别是因为C++标准貌似没有对empty情况下的弹出操作做规定。
摘抄如下:
http://www.cplusplus.com/reference/vector/vector/pop_back/
Exception safety
If the container is not empty, the function never throws exceptions (no-throw guarantee).Otherwise, it causes undefined behavior.
其实这是一个不该犯的错误,在任何弹出操作前都进行empty检查是必要的。
谨记。
- 【吃一堑】vector的pop_back使用错误造成的core dump
- 又是打印log错误造成的core dump
- 造成segment fault,产生core dump的可能原因
- 一 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 一 造成segment fault,产生core dump的可能原因
- [转]造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 一 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- 造成segment fault,产生core dump的可能原因
- YARN/MRv2 ResourceManager代码分析
- 使用C++调用V8
- bash中的常见问题
- 大型网站架构不得不考虑的10个问题
- jQuery插件的编写相关技术 设计总结和最佳实践
- 【吃一堑】vector的pop_back使用错误造成的core dump
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- No object in the CompoundRoot has a publicly accessible property named
- 字节、字、bit、byte的关系
- MonetDB的SQL手册——Explain(执行计划)
- 范数
- 黑马程序员_Java基础语法1
- Android之PopupWindow弹出对话框
- Deserialize XML data into object