0
這是導致飛機失事的原因行:C++程序崩潰的字符串連接。
if (size <= 0)
return;
if (data)
{
std::string sData = std::string((char*)data, size);
buffer += sData; <-- This is the line causing crash
processBuffer();
}
else
return;
這裏是堆棧跟蹤:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1282016352 (LWP 27952)]
0x002b48ec in memcpy() from /lib/tls/libc.so.6
(gdb) bt
#0 0x002b48ec in memcpy() from /lib/tls/libc.so.6
#1 0x001fea31 in std::string::_Rep::_M_clone() from /usr/lib/libstdc++.so.6
#2 0x001fef2e in std::string::reserve() from /usr/lib/libstdc++.so.6
#3 0x001ff83d in std::string::append() from /usr/lib/libstdc++.so.6
#4 0x001ff9e2 in std::string::operator+=() from /usr/lib/libstdc++.so.6
#5 0x003fc6c8 in StreamDecoder::StreamDecoderEncoder::addData
at src/StreamDecoder.cpp:171
我已經驗證了data
不爲空,緩衝器聲明爲私有成員的字符串該類的變量。
我不知道爲什麼memcpy上有段錯誤。這裏可能出了什麼問題?
嘗試valgrind,也許你不小心覆蓋了'buffer'的內部。 – arne
什麼是「緩衝區」? –
@JoachimPileborg它是一個字符串。 – Chani