= Сообщение: 4419 из 5321 ========================================= RU.HUSKY = От : Michael Dukelsky 2:5020/1042 03 May 21 16:20:12 Кому : Nil Alexandrov 03 May 21 16:20:12 Тема : Утечка памяти в readMsgFromPkt() FGHI : area://RU.HUSKY?msgid=2:5020/1042+608ffa46 На : area://RU.HUSKY?msgid=2:5015/46+608b9aab = Кодировка сообщения определена как: CP866 ================================== ============================================================================== Привет, Nil!
30 April 2021 08:37, Nil Alexandrov послал(а) письмо к All:
NA> Алокация памяти под сообщение происходит тут NA> husky/hpt/src/pktread.c: readMsgFromPkt() NA> 732 msg = (s_message *)safe_malloc(sizeof(s_message));
NA> Вызывающая функция будет освобождать память если вернулся код 1, иначе NA> ошибка и не ожидается, что надо что-то освобождать, NA> например, hpt/src/toss.c: processPkt() 1920 while((msgrc = NA> readMsgFromPkt(pkt, header, &msg)) == 1) внутри этого цикла память NA> освобождается, за пределами - нет.
За пределами цикла память освобождать не надо. Если заглянуть внутрь readMsgFromPkt(), можно увидеть два оператора return до выделения памяти (на них наплевать) и два - после. Из этих последних двух один возвращает ту самую единицу и один - двойку. По поводу единицы всё понятно, а перед возвращением двойки есть freeMsgBuffers(msg), но забыли nfree(msg). Добавил.