博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stl中string作为成员变量引起的core问题
阅读量:5359 次
发布时间:2019-06-15

本文共 1655 字,大约阅读时间需要 5 分钟。

 在使用stl的string的过程中,遇到了一个会引起core的问题,具体的问题代码如下:

#include 
#include
/** * 该程序是为测试stl的string在某种情况下,发生了core * 当构造函数的写法为写法一的情况,程序发生了core * 测试环境为 * Linux mengpl-virtual-machine 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux * 编译器为 * g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 * core信息如下: * (gdb) where #0 0x00007ffff7b78bca in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #1 0x00007ffff7b79ff6 in std::string::assign(std::string const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #2 0x0000000000400ca9 in StringTest::set_phone (this=0x7fffffffdb60, strPhone=...) at stlstringtest.cpp:26 #3 0x0000000000400b3e in main (argc=1, argv=0x7fffffffdc78) at stlstringtest.cpp:38 * 当修改为写法二的情况时,未发生core */class StringTest{public: // 写法一 StringTest() { memset(this, 0, sizeof(*this)); } // // 写法二 // StringTest():iSize(0),phone("") // { // } inline int get_size() const { return m_iSize; } inline std::string get_phone() const { return m_strPhone; } inline void set_size(const int & iSize) { m_iSize = iSize; } inline void set_phone(const std::string & strPhone) { m_strPhone = strPhone; }private: int m_iSize; std::string m_strPhone;};int main(int argc,char * argv[]){ StringTest sTest; sTest.set_size(1); sTest.set_phone(""); std::cout << sTest.get_size() << std::endl; }

 

core信息已经写在了代码中,分析是因为memset函数,对类占用内存进行了分配,而stl中string本身也有一套内存分配的机制,二者产生了冲突,所以产生了core。具体问题,待日后研究源码分析,先记下这个问题。引以为戒,不在使用这样的写法。

转载于:https://www.cnblogs.com/xiaomengaliang/p/3635625.html

你可能感兴趣的文章
第三章 Matlab的选择结构
查看>>
PHP二位数组按照数组的某个字段值排序
查看>>
用actor model实现intel tbb这样的用法
查看>>
拖动的实现(不能用drag相关的属性)
查看>>
《流畅的python》这本确实老辣
查看>>
ExtJs之 Ext.JSON
查看>>
C#高级编程(第9版)pdf
查看>>
4.5 制作一寸相片
查看>>
Netty源码分析--Reactor模型(二)
查看>>
斐波那契数列
查看>>
关于回溯与招聘市场
查看>>
关于回溯与夏令营
查看>>
前端经典面试题:如何理解 HTML 语义化?
查看>>
你知道 GNU Binutils 吗?【binutils】
查看>>
Linux基础命令---more
查看>>
SRM 595 DIV 1 - 1
查看>>
PBR 应用于虚幻引擎4贴图和材质创建的启示
查看>>
[洛谷 1613] 跑路
查看>>
来自java文档 URI类
查看>>
类初始化 常量引用
查看>>