मैं "सूची इटरेटर dereferencable नहीं" त्रुटि मिलती है जब निम्न कोड का उपयोग:सूची इटरेटर को अस्वीकार्य नहीं है?
bool done = false;
while (!_list_of_messages.empty() && !done) {
// request the next message to create a frame
// DEBUG ERROR WHEN NEXT LINE IS EXECUTED:
Counted_message_reader reader = *(_list_of_messages.begin());
if (reader.has_more_data()) {
_list_of_frames.push_back(new Dlp_data_frame(reader, _send_compressed_frames));
done = true;
} else {
_list_of_messages.pop_front();
}
}
ध्यान दें कि (लाइन के साथ शुरुआत "Counted_message_reader ..." समस्या दे रही है एक है) त्रुटि हमेशा नहीं होती है लेकिन यादृच्छिक समय पर प्रतीत होती है (आमतौर पर जब बहुत सारे buffered डेटा होते हैं)।
std::list<Counted_message_reader> _list_of_messages;
आसपास के कोड हम _list_of_messages
पर pop_front
, push_front
और size
, empty
या end
चेकों लेकिन कोई erase
कॉल कर सकता है में:
_list_of_messages
इस प्रकार के रूप में घोषित किया गया है।
मैंने एसटीएल दस्तावेज का अध्ययन किया है और कोई चमकदार समस्या नहीं देख सकता है। क्या उपर्युक्त कोड में कुछ गड़बड़ है या क्या मेरे पास मेमोरी लीक कहीं है?
धन्यवाद! की सराहना की!
* (_ list.begin()) का उपयोग करने के बजाय आप _list.front() का उपयोग कर सकते हैं। – Patrick
क्या आप एकाधिक धागे से सूची तक पहुंच रहे हैं? – Naveen
@ पैट्रिक - क्या इससे कोई फर्क पड़ता है? – Roderick