C++ 访问类的std::字符串时崩溃
我有以下几点建议C++ 访问类的std::字符串时崩溃,c++,linux,stdstring,coredump,C++,Linux,Stdstring,Coredump,我有以下几点建议 Program terminated with signal 11, Segmentation fault. #0 0xb5b1c2f8 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::all
Program terminated with signal 11, Segmentation fault.
#0 0xb5b1c2f8 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
from /arm-none-linux-gnueabi/libc_m/usr/lib/libstdc++.so.6
#0 0xb5b1c2f8 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
from /arm-none-linux-gnueabi/libc_m/usr/lib/libstdc++.so.6
#1 0x00964f5c in Qct::OamClientUtil::getRsp (this=<value optimized out>)
at /Agent/include/oamClientUtil.hpp:92
#2 0x00902118 in MapPM::sendCollect (this=0xb4af9928) at /gent/src/mapPM.cc:557
#3 0x00921dc0 in Agent::handlePMCollectReq (this=<value optimized out>, buf=0xb335ccb0)
at /Agent/src/Agent.cc:5671
#4 0x0095deb4 in AgentRxHandler (handle=<value optimized out>, buf=0xb335ccb0)
at /Agent/src/uslAgent.cc:398
#5 0x0080f364 in uslDCTEntry (dct=20401048) at /usl/src/lcid/uslDCT.cc:253
#6 0x009c867c in TASK::taskEntryPoint (params=0x1375098) at /emvxworks/taskLib.cpp:224
#7 0x009c7bbc in pthreadw_taskentry (arg=<value optimized out>) at /emvxworks/pthread_wrapper.cpp:786
#8 0xb59a6120 in start_thread (arg=0xb4aff460) at pthread_create.c:307
#9 0xb592e9f8 in nfsservctl ()
from /CodeSourcery/4.6.3-2012.03-57/arm-none-linux-gnueabi/libc_m/lib/libc.so.6
Backtrace stopped: frame did not save the PC
程序以信号11终止,分段故障。
#std::basic_string::basic_string(std::basic_string const&)中的0 0xb5b1c2f8
来自/arm none-linux-gnueabi/libc_m/usr/lib/libstdc++.so.6
#std::basic_string::basic_string(std::basic_string const&)中的0 0xb5b1c2f8
来自/arm none-linux-gnueabi/libc_m/usr/lib/libstdc++.so.6
#Qct::OamClientUtil::getRsp中的1 0x00964f5c(this=)
at/Agent/include/oamClientUtil.hpp:92
#2 0x00902118位于/gent/src/MapPM.cc:557的MapPM::sendCollect(this=0xb4af9928)中
#代理中的3 0x00921dc0::handlePMCollectReq(this=,buf=0xb335ccb0)
at/Agent/src/Agent.cc:5671
#AgentRxHandler中的4 0x0095deb4(句柄=,buf=0xb335ccb0)
at/Agent/src/uslAgent.cc:398
#5 0x0080f364,位于/usl/src/lcid/uslDCT.cc:253的uslDCTEntry(dct=20401048)中
#6 0x009c867c位于/emvxworks/taskLib.cpp:224的TASK::taskEntryPoint(参数=0x1375098)中
#在/emvxworks/pthread_wrapper.cpp:786的pthread w_taskentry(arg=)中的7 0x009c7bbc
#在pthread_create.c:307处的start_线程(arg=0xb4aff460)中的8 0xb59a6120
#nfsservctl()中的9 0xb592e9f8
from/codesource/4.6.3-2012.03-57/arm none-linux-gnueabi/libc_m/lib/libc.so.6
回溯已停止:帧未保存电脑
我很困惑一个简单的字符串是如何导致崩溃的
由于代码相当大,我现在将粘贴相关的类。如果需要,将添加更多
/Agent/include/oamClientUtil.hpp:92
37 class OamClientUtil
38 {
39 public:
40 OamClientUtil();
41
42 virtual
43 ~OamClientUtil();
44
45
46 void
47 initOamProxyConn();
48
49 void
50 setBatch(
51 OamClients& batch
52 );
53
54 /// load oam transactions from a file
55 /// and convert them to a list of oam client transactions
56 bool
57 loadTrxFromFile(
58 std::string& batchfilename
59 );
60
61 /// actual processing the list of transactions
62 MgmtResult
63 run();
64
65 bool
66 isGood();
67
68 /// return the dryrun flag
69 bool
70 isDryrun();
71
72 /// set the dryrun flag
73 bool
74 isDryrun(bool flag);
75
76 const OamErrorString&
77 errorString() const;
78
79
80 void
81 initRsp() {
82 getRsp_ = "";
83 }
84 void
85 initKeyRsp() {
86 getKeysRsp_ = "";
87 }
88
89
90 std::string
91 getRsp() {
92 return getRsp_;
93 }
94 std::string
95 getKeysRsp() {
96 return getKeysRsp_;
97 }
98 bool
99 getKeysLast() {
100 return getKeysLast_;
101 }
102 private:
103 static const unsigned REQ_TIMEOUT_SECS = 10;
104
105 /// send get request
106 MgmtResult
107 sendGetReq(
108 OamClientTrxPtr trx
109 );
110
111 /// send getKeys request
112 MgmtResult
113 sendGetKeysReq(
114 OamClientTrxPtr trx
115 );
116 /// send set request
117 MgmtResult
118 sendSetReq(
119 OamClientTrxPtr trx
120 );
121
122 /// send clear request
123 MgmtResult
124 sendClearReq(
125 OamClientTrxPtr trx
126 );
127
128 /// process the list of transactions
129 MgmtResult
130 processTransactionList(
131 OamClientTrxList& trxlist ///< The list of transaction to be processed
132 );
133
134 /// process one transaction
135 MgmtResult
136 processTransaction(
137 OamClientTrxPtr trx ///< The transaction to be processed
138 );
139
140 /// print content of one transaction
141 void
142 printRequests(
143 OamClientTrxPtr trx
144 );
145
146 void
147 indCallback(
148 unsigned int msgId,
149 QctUint8_t* indMsgBuffer,
150 unsigned int indMsgBufferLength);
151
152
153 static ProvisioningPtr
154 initProvisioningPtr();
155
156
157 static MgmtXmlPtr
158 initMgmtXmlPtr();
159
160 QmiClient qmiClient_;
161 MgmtXmlPtr mgmtXmlPtr_;
162 OamClients batch_;
163 SerialStreamFixedBuf<QMI_FSM_OAM_CLIENT_MAX_LENGTH_V04> sstream_;
164 QctUint16_t trxid_;
165
166 std::string batchfilename_;
167 bool isDryrun_;
168 bool isGood_;
169 QctUint32_t oamSessionId_;
170 OamErrorString errorMsg_;
171 std::string getRsp_;
172 std::string getKeysRsp_;
173 bool getKeysLast_;
174 ProvisioningPtr provisioningPtr_;
175 };
176
#2 0x00902118 in MapPM::sendCollect (this=0xb4af9928) at /Agent/src/mapPM.cc:557
549Qct::MgmtResult MapPM::sendCollect()
550{
551 clUtil_.initRsp();
552 clUtil_.setBatch(oamClients_);
553 Qct::MgmtResult mr = clUtil_.run(); // process every transaction in oamClients_
554 if (mr == Qct::MGMT_RESULT_FAIL) {
555 //return Qct::MGMT_RESULT_FAIL;
556 }
557 return makePMFile(clUtil_.getRsp());
558
}
clUtil_ is object of Qct::OamClientUtil
Qct::OamClientUtil clUtil_;
/Agent/src/Agent.cc:5671
5671 Qct::MgmtResult result = mapPM.sendCollect();
/Agent/src/uslAgent.cc:398
400 case OAM_AGENT_PMSETUP:
401 oamAgent.handlePMSetupReq(buf);
402 break;
/Agent/include/oamClientUtil.hpp:92
37级奥姆克利恩图蒂尔酒店
38 {
39公众:
40奥姆克林图尔();
41
42虚拟的
43~OamClientUtil();
44
45
46无效
47 initOamProxyConn();
48
49无效
50次挫折(
51 OAM客户和批次
52 );
53
54///从文件加载oam事务
55///并将其转换为oam客户端事务列表
56布尔
57 loadTrxFromFile(
58 std::string和batchfilename
59 );
60
61///实际处理事务列表
62 MgmtResult
63 run();
64
65布尔
66是好的();
67
68///返回dryrun标志
69布尔
70 isDryrun();
71
72///设置干运行标志
73布尔
74 isDryrun(布尔标志);
75
76常量OamErrorString&
77 errorString()常量;
78
79
80无效
81 initRsp(){
82 getRsp_u=“”;
83 }
84无效
85 initKeyRsp(){
86 getKeysRsp_=“”;
87 }
88
89
90标准::字符串
91 getRsp(){
92返回getRsp;
93 }
94标准::字符串
95 getKeysRsp(){
96返回getKeysRsp;
97 }
98布尔
99 getKeysLast(){
100返回getKeysLast;
101 }
102私人:
103静态常数无符号请求超时时间=10;
104
105///send-get请求
106 MgmtResult
107 sendGetReq(
108 OAMClientTtr trx
109 );
110
111///发送getKeys请求
112 MgmtResult
113 sendGetKeysReq(
114 OAMClientTtr trx
115 );
116///发送集合请求
117 MgmtResult
118 sendSetReq(
119 OAMClienttr trx
120 );
121
122///发送清除请求
123mgmtresult
124 sendClearReq(
125 OAMClienttr trx
126 );
127
128///处理事务列表
129mgmtresult
130处理事务列表(
131 OamClientTrxList&trxlist//<要处理的事务列表
132 );
133
134///处理一个事务
135mgmtresult
136处理事务(
137 OamClientTrxPtr trx//<要处理的事务
138 );
139
140///打印一个事务的内容
141无效
142打印请求(
143 OAMClientTtr trx
144 );
145
146无效
147.回拨(
148无符号整数msgId,
149 QctUint8_t*indMsgBuffer,
150无符号整数indMsgBufferLength);
151
152
153静态供应GPTR
154 initProvisioningPtr();
155
156
157静态MgmtXmlPtr
158 initMgmtXmlPtr();
159
160 QmiClient QmiClient;
161 MgmtXmlPtr MgmtXmlPtr;
162个OAM客户;
163串行流固定BUF SSSTREAM_u2;;
164 QctUint16_t trxid;
165
166标准::字符串批处理文件名;
167 bool isDryrun;
168布尔是好的;
169 QctUint32_t oamSessionId_u3;;
170 OamErrorString ERRORMMSG_389;;
171标准::字符串getRsp;
172 std::字符串getKeysRsp;
173 bool getKeysLast;
174供应GPTR供应GPTR;
175 };
176
#2 0x00902118位于/Agent/src/MapPM.cc:557的MapPM::sendCollect(this=0xb4af9928)中
549Qct::MgmtResult MapPM::sendCollect()
550{
551 clUtil.initRsp();
552 clUtil.setBatch(oamClients);
553 Qct::MgmtResult mr=clUtil_u2;.run();//处理oamClients中的每个事务_
554如果(mr==Qct::管理结果\失败){
555//返回Qct::管理结果失败;
556 }
557返回makePMFile(clUtil.getRsp());
558
}
clUtil是Qct::OamClientUtil的对象
Qct:OamClientUtil clUtil;
/Agent/src/Agent.cc:5671
5671 Qct::MgmtResult result=mapPM.sendCollect();
/Agent/src/uslAgent.cc:398
400箱OAM\U代理\U PMU设置:
401 oamAgent.handlePMSetupReq(buf);
402断裂;
我认为您的程序在这一点上崩溃不应该有任何正当的理由——这是假设
- 所有代码都是用同一个编译器编译的
- 头文件在不同文件中的编译方式不同(即,更改头文件后,您没有忘记重新编译某些内容)