Утечка памяти

Тема в разделе "Программирование / Скриптинг", создана пользователем diller110, 26 фев 2015.

  1. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    47
    Помогите разобраться, от чего может происходить утечка:
    Код:
    [SM] Plugin encountered error 17: Stack memory leaked by native
    L 02/26/2015 - 00:48:14: [SM] Displaying call stack trace for plugin "ac-core.smx":
    L 02/26/2015 - 00:48:14: [SM]   [0]  Line 169, ac-core.sp::Event_PlayerTeam()
    Вот код:
    Оффтоп Посмотреть вложение hintmesseger.sp

    Строка указанная в ошибке:
    new String:Admins[count] [];
     
  2. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    ac-core.smx вот это сюда
     
  3. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    47
  4. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    47
    Так и не смог понять. Возможно, забываю закрыть какой-то handle. Таймеры все разовые, вроде должны удалять по завершению. Единственный Datapack закрываю в таймере, не уверен что произойдет если закрыть его сразу после посылки в таймер на 10 секунд, скопируется ли он или уничтожится не дождавшись выполнения.

    Вот обособленный плагин: Посмотреть вложение ac-hintmessenger.sp . Сама ошибка: Оффтоп

    И еще теоретический вопрос: Допустим надо вывести в чат сообщение через 5 секунд после присоединения к команде. В player_team ивенте создаем таймер. Будет ли он создан конкретно для этого игрока, или при заходе другого игрока этот же таймер пойдет заного? Если 2-е, то как эффективнее всего создавать подобное?
    new Handle:WelcomeTimers[33][4]; - по ощущениям тяжеловато. И возможно утечка памяти именно в этом.
     
  5. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    47
    Нет, последний таймер длится 14 секунд, почти вечность, и без handle не обойтись, чтобы убить таймер. Добавил уничтожение при выходе.

    Но где-же утечка?
     
  6. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    47
    Да намного проще и эффективнее) Спасибо!
     
  7. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    47
    AlmazON, Все хорошо работает, кроме вывода админов. И снова мозгодробительные ошибки.
    Таймеры срабатывают успешно, добавлял в 3 таймер вывод: Timer 3 finished, без проблем выводило, но в хинты не хотел. Написал себе понятную версию вместо:
    (Оба варианта в файле Посмотреть вложение hintmesseger.sp )
    Оффтоп
    Вот такую (опять с массивом и лишним счетчиком):
    Оффтоп

    Ошибка заключалась в том, что PrintHintText() - не мог найти client с номером 167*****(видимо макс целочисленное). Как вообще такое возможно не понимаю. Client от момента получения никак не юзается. Userid еще интереснее, пишет ошибку например что userid=209 не найден. В то время как я именно 209 id.

    В остальном все работает хорошо! Можешь еще подсказать, что & считает в этой операции: GetUserFlagBits(i) & ADMFLAG_ROOT)?

    И еще: Можно в if в скобки вводить условия? && ((GetUserFlagBits(i) & ADMFLAG_SLAY) || (GetUserFlagBits(i) & ADMFLAG_ROOT)) &&
     
  8. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    diller110
    Ты используешь userid О_О ты же клиента получаешь, вот его и юзай
    а если админов больше 2?
     
    Последнее редактирование: 1 мар 2015
  9. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.506
    Симпатии:
    1.961
    Hint Messenger v1.0 (отвязано от ядра)

    Всё работает, за ваши собственные "багоисправления" я не отвечаю! :)
    Отвязал плагин от ядра, добавил проверку на ботов (дабы зря система дальше от них не работала), поменял доступ на флаг ROOT, убрал все цвета - все сообщения были отображены (и да, меня, как админа отобразило).
    Даже ошибок при компиляции нет, которые могли быть по невнимательности, а ещё жалуются! :-D
     

    Вложения:

    diller110 нравится это.
  10. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    47
    Спасибо за старания, добавил цвета (вставил из прошлого, поэтому не в них было дело). Все работает отлично!

    Интересно все-таки: GetUserFlagBits(userid) & ADMFLAG_ROOT, эквивалентно ==, или что он высчитывает?


    В хинт строки ограничены, поэтому и 2 хватит.
     
  11. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.506
    Симпатии:
    1.961
    Количество битов. & - побитовый И или побитовое сравнение. Биты смотри в константах include функций.
    Во флаге было дело - нет такого флага ни у кого (отдельного), вот и сообщения нет.
     
    diller110 нравится это.