stl中string作為成員變數引起的core問題

2021-06-19 15:18:24 字數 1391 閱讀 5423

在使用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

// // 寫法二

// stringtest():isize(0),phone("")

// inline int get_size() const

inline std::string get_phone() const

inline void set_size(const int & isize)

inline void set_phone(const std::string & strphone)

private:

int m_isize;

std::string m_strphone;

};int main(int argc,char * argv)

core資訊已經寫在了**中,分析是因為memset函式,對類占用記憶體進行了分配,而stl中string本身也有一套記憶體分配的機制,二者產生了衝突,所以產生了core。具體問題,待日後研究原始碼分析,先記下這個問題。引以為戒,不在使用這樣的寫法。

STL1 string 類的所有成員函式

寫 時經常會遇到對字串的處理,如下是string類的成員函式 函式名稱 功能建構函式 產生或複製字串 析構函式 string 銷毀字串 assign 賦以新值 swap 交換兩個字串的內容 新增字元 insert 插入字元 erase 刪除字元 clear 移除全部字元 resize 改變字元數量 ...

c l類中static成員函式和成員資料變數使用

c 中為了保護類的封裝性,提出了static成員來代替全域性變數,下面我們來了解一下static成員的使用方法 程式通過vs2008除錯成功 例一 include stdafx.h include include include include include class test int test...

c 中string類成員函式c str

1.string類成員函式c str 的原型 const char c str const 返回乙個以null終止的c字串 2.c str 函式返回乙個指向正規c字串的指標,內容和string類的本身物件是一樣的,通過string類的c str 函式能夠把string物件轉換成c中的字串的樣式 3....