2013-07-23 63 views
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上有段錯誤。這裏可能出了什麼問題?

+2

嘗試valgrind,也許你不小心覆蓋了'buffer'的內部。 – arne

+1

什麼是「緩衝區」? –

+0

@JoachimPileborg它是一個字符串。 – Chani

回答

0

我幾個月前曾在一個學校項目上工作過這個問題......如果一個字符串變得很大,它可能會導致段錯誤。嘗試使用類似ostringstream的東西。