2011-02-11 10 views
5

मैं अनुभव किया है समस्याओं। जब मैं इस उदाहरण कोड को चलाता हूं तो यह segfaults। क्यूं कर?बढ़ावा :: asio का उपयोग कर संहिता :: streambuf segfault asio :: streambuf का उपयोग कर और आशा करता हूं किसी ने मुझे बता सकते हैं कि मैं कक्षा गलत तरीके से उपयोग कर रहा हूँ कर सकते हैं का कारण बनता है

बातें भ्रामक बनाने के लिए, इस कोड को विंडोज (विजुअल स्टूडियो 2008) पर काम करता है, लेकिन लिनक्स पर काम नहीं करता है (जीसीसी 4.4.1 के साथ)।

#include <boost/asio.hpp> 
using namespace std; 

int main() 
{ 
     boost::asio::streambuf Stream; 

     // Put 4 bytes into the streambuf... 
     int SetValue = 0xaabbccdd; 
     Stream.sputn(reinterpret_cast<const char*>(&SetValue), sizeof(SetValue)); 

     // Consume 3 of the bytes... 
     Stream.consume(3); 
     cout << Stream.size() << endl; // should output 1 

     // Get the last byte... 
     char GetValue; 
     // --------- The next line segfaults the program ---------- 
     Stream.sgetn(reinterpret_cast<char*>(&GetValue), sizeof(GetValue)); 
     cout << Stream.size() << endl; // should output 0 

     return 0; 
} 
+0

संभव बग ... – niXman

+0

यह सिर्फ 'asio :: streambuf' है, या' करता std :: streambuf' प्रदर्शनी समान व्यवहार? –

+0

मुझे भी कोर डंप किया गया। कोड संकलित करने के लिए कृपया '#' शामिल करें। – vissi

उत्तर

1

तरह से मैं का इस्तेमाल किया और asio देखा :: streambuf आमतौर पर उपयोग किया है std :: ostream या std :: IStream, कुछ की तरह साथ है:

boost::asio::streambuf Stream; 
std::ostream os(&Stream); 
int SetValue = 0xaabbccdd; 
os.write(reinterpret_cast<const char*>(&SetValue), sizeof(SetValue)); 

मुझे यकीन है कि नहीं कर रहा हूँ क्यों अपने कोड काम नहीं करता है, लेकिन अगर उपर्युक्त काम करता है तो इसके माध्यम से कदम उठाने से आपका कोड बनाम कुछ अंतर दिखाई दे सकता है। यह भी किस लाइन पर दुर्घटनाग्रस्त है?

+0

कोड के बाद कोड क्रैश हो जाता है जो कहता है "अगली पंक्ति प्रोग्राम को segfaults"। –

+0

@DylanKlomparens: ठीक है। क्या मैंने वहां सवाल का जवाब दिया था? इसे बीते एक अर्सा हो गया है। :-) एक बग की तरह लगता है जहां आप जिस आकार को पारित कर रहे हैं उसका सम्मान नहीं किया जाता है। –

संबंधित मुद्दे