~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest41326
HackerMan
Most2
Nausicaa
Ruskoye_911
Spirit90
Vort
`
acetone_
ananas
anon3
b3t4f4c3
fidoid_
guest
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
onon
Мне нужно при каждом получении ACKа очищать список NACKов и потом добавлять их заново.
onon
Как это сделать правильно? Так:
onon
m_NACKedPackets.clear ();
onon
Или нужно ещё
onon
for (auto it: m_NACKedPackets)
onon
m_LocalDestination.DeletePacket (it);
orignal
счас гляну
onon
Это я взял из void Stream::CleanUp ()
orignal
у меня нет такой структуры
orignal
как у тебя объясвлена m_NACKedPackets?
onon
Я делаю по образцу m_SentPackets
orignal
счас
onon
Там тот же смысл
orignal
надо итрератор потому что там голый указатель
onon
Ну так же как и в m_SentPackets
onon
Меня просто смущает m_LocalDestination.DeletePacket (it);
onon
Почему на m_LocalDestination
orignal
потому что в ней сидит пул пакетов
orignal
очевидно же
onon
Так я лишнего ничего не удалю?
onon
Он общий этот пул?
orignal
не знаю
orignal
у тебя пакет только в одном списке или нет?
orignal
DeletePacket можно вызывать только 1 раз
orignal
для пакета
onon
А мне нужно только из m_NACKedPackets удалить а не вообще
onon
m_NACKedPackets.clear ();
onon
Сработает?
orignal
да конечно
orignal
главное чтобы пакет не сидел только в нем
orignal
иначе будет утечка памяти
onon
хмм
onon
Надо подумать, может ли такая ситуация возникнуть
orignal
так что тут надо осторожно
orignal
если совсем надо такое то лучге все переделать на shared_ptr
onon
Ладно, буду думать, пока всё
onon
m_NACKedPackets.erase (it); получается удалит только один пакет (точнее ссылку на него)
onon
В m_SentPackets там почему-то m_SentPackets.erase (it++);
onon
Там что, нумерация различается?
orignal
m_SentPackets.erase (it++);
orignal
это еще что за хуета?
orignal
в какой строчке?
onon
void Stream::ProcessAck (Packet * packet)
orignal
m_NACKedPackets.erase (it) так нельзя
orignal
надо
onon
499
orignal
it = m_NACKedPackets.erase (it)
orignal
я хочу знать кто ЭТО написал
onon
Это не я
orignal
я вижу что я
orignal
вопрос почему
orignal
а понятно потому что set
orignal
с ним там можно
orignal
да из set надо именно так как написано
onon
for (auto it = m_SentPackets.begin (); it != m_SentPackets.end ();)
onon
m_SentPackets.erase (it++);
onon
А если
onon
for (auto it : m_SentPackets)
onon
То it = m_NACKedPackets.erase (it)
onon
Так?
orignal
нет
orignal
так нельзя
orignal
у тебя итераторы из разных структур
onon
Ладно, не буду делать erase
orignal
что ты хочешь сделать объясни
onon
Буду только clear ()
orignal
так и надо
onon
for (auto it = m_SentPackets.begin (); it != m_SentPackets.end ();)
onon
m_NACKedPackets.insert (it)
orignal
если тебе надо удалить все из сткруторы
onon
Или m_NACKedPackets.insert (it++)
orignal
так тоже нельзя
orignal
ты не имеешь право использовтаь итератор из другой структоры
onon
?
onon
Как всё сложно
orignal
у тебя интретор от m_SentPacekts
orignal
а вставляешь в m_NACKePackets
onon
Как правильно вставить
onon
Или лучше другую структуру какую использовать?
onon
Просто список значений
orignal
m_NACKedPackets.insert (*it)
orignal
думаю так
onon
Я попробую
orignal
короче Packet * p = *it; m_NACKedPackets.insert (p)
orignal
интретор надо for (auto it: m_SentPackets)
orignal
тогда просто m_NACKedPackets.insert (it)
orignal
вот так надо
onon
Не, тут уже есть итератор, и он уже все наки проверяет
onon
Остаётся только их собрать вместе
orignal
я не могу сказать пока не вижу код
orignal
а тем временем я выпилил boost::date_time из профилей
onon
В любом случае я потом всё тебе скину, там и проверишь
orignal
да
orignal
мне надо видеть весь код
orignal
R4SAS надо будет в ведре выпилить зависимость от boost::date_time
orignal
следующий кандидат boost::filesystem
segfault
> да из set надо именно так как написано
segfault
разве итератор не инвалид становится?
segfault
orignal:
orignal
в таком коде нет
orignal
можно из итератора удалять из этой же струкутры только осторожно