В карте используется мальтибоард: 14 строк, 10 колонок, отображение иконок героев и всякая статистическая информация. Обновляется с периодом в 1 сек.
Примерно через часов 10-12 игры в сингле вылетает фатал абсолютно в непредсказуемом месте, даже если герой ничего не использует и не двигается.
Изучив соответствующие темы по поиску наткнулся на это xgm.guru/forum/showthread.php?t=38233&highlight=%F4%E0%F2%E0... (последний пост)
Может ли заключаться проблема в этом, учитывая такую продолжительность игры?

Принятый ответ

При использовании нативного функционала работы с мультибордом утекает multiboarditem при каждом действии. Советую попользоваться этим набором:
lib MBItems
{
    private multiboarditem  mbitem

    void MBSS(multiboard board, int col, int row, bool showValue, bool showIcon)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemStyle(mbitem, showValue, showIcon)
        MultiboardReleaseItem(mbitem)
    }

    void MBSC(multiboard board, int col, int row, real red, real green, real blue, real transparency)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemValueColor(mbitem, PercentToInt(red,255), PercentToInt(green,255), PercentToInt(blue,255), PercentToInt(100.0-transparency,255))
        MultiboardReleaseItem(mbitem)
    }

    void MBSW(multiboard board, int col, int row, real width)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemWidth(mbitem, width/100.0)
        MultiboardReleaseItem(mbitem)
    }

    void MBSI(multiboard board, int col, int row, string iconFileName)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemIcon(mbitem, iconFileName)
        MultiboardReleaseItem(mbitem)
    }

    void MBST(multiboard board, int col, int row, string val)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemValue(mbitem, val)
        MultiboardReleaseItem(mbitem)
    }
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
23
8 лет назад
0
Причем тут мультиборд? У тебя просто утечки.
0
12
8 лет назад
0
Меня очень смутил последний пост в той указанной теме - "набирало память из-за частого изменения мультиборда."
+ читал, что сам переодический апдейт мультиборда вызывает утечки. Если да - то какие и насколько это может быть критично?
0
30
8 лет назад
Отредактирован Clamp
0
При использовании нативного функционала работы с мультибордом утекает multiboarditem при каждом действии. Советую попользоваться этим набором:
lib MBItems
{
    private multiboarditem  mbitem

    void MBSS(multiboard board, int col, int row, bool showValue, bool showIcon)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemStyle(mbitem, showValue, showIcon)
        MultiboardReleaseItem(mbitem)
    }

    void MBSC(multiboard board, int col, int row, real red, real green, real blue, real transparency)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemValueColor(mbitem, PercentToInt(red,255), PercentToInt(green,255), PercentToInt(blue,255), PercentToInt(100.0-transparency,255))
        MultiboardReleaseItem(mbitem)
    }

    void MBSW(multiboard board, int col, int row, real width)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemWidth(mbitem, width/100.0)
        MultiboardReleaseItem(mbitem)
    }

    void MBSI(multiboard board, int col, int row, string iconFileName)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemIcon(mbitem, iconFileName)
        MultiboardReleaseItem(mbitem)
    }

    void MBST(multiboard board, int col, int row, string val)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemValue(mbitem, val)
        MultiboardReleaseItem(mbitem)
    }
}
Принятый ответ
0
28
8 лет назад
0
Clamp, мб ты хотел сказать гуишного функционала?
ибо в джасс можно удалить боардитем (что в твоём коде и делается)
0
30
8 лет назад
Отредактирован Clamp
0
nvc123, родные функции в JASS тоже утекают итем, надо свои допиливать

Ну в целом короч "встроенные решения", как гуи, так и джасс там хреновые
0
12
8 лет назад
0
Clamp:
nvc123, родные функции в JASS тоже утекают итем, надо свои допиливать

Ну в целом короч "встроенные решения", как гуи, так и джасс там хреновые
Те "родные функции" о которых ты говоришь (т.е. BJ функции) это как раз ГУИ и есть, в чем можно легко убедится при конвертировании. Реальные "встроенные решения" (т.е. нативки) в джассе нормальные, не утекают.
0
12
8 лет назад
0
Вообще по сути: может набраться утечек (multiboarditem) с мультиборда за 10-12 игры на краш, учитывая, что до этого вообще лагов не чувствовалось и фпс не падал?
0
30
8 лет назад
Отредактирован Clamp
0
Обновляется с периодом в 1 сек.
рекомендую обновлять ячейки МБ не каждые N секунд, а только при изменении их значений и только нужную ячейку.
0
28
8 лет назад
0
Clamp, утечка это не освобождаемая память
если кодер не освободил память после того как выделил её то это не функции утечные
это у кодера руки не из того места растут
вот в гуи нету возможности освободить память
поэтому гуи(бж) утечные
0
30
8 лет назад
0
nvc123, расскажи мне ещё что такое утечка в вц. Если кодер написал утечную функцию, то будь он трижды с руками не из того места, функция всё равно останется утечной.
Любое приложение, которое допускает утекание памяти, можно было написать так, чтобы она не утекала, но тем не менее это приложение с утечками.
0
28
8 лет назад
Отредактирован nvc123
0
Clamp, функция не утечна
та функция должна выделять память и она её выделяет
если ты после Object *object=new Object(); не пишешь в конце free object; то это ты дебил а не создатели языка/класса/конструктора
или если ты напишешь new int[1024*1024*1024*1024*256] то виноват не разработчик языка а тот придурок что выделяет столько памяти (то есть ты)
0
30
8 лет назад
0
nvc123, если разработчик пишет функцию, которая допускает утекание памяти, эта функция остаётся функцией, и её свойство "допускает утекание памяти" никуда не девается. Детский сад, ей-богу.

В blizzard.j, кстати, есть не-BJ версии для работы с МБ, и они ВНЕЗАПНО тоже утекающие.
Ты разводишь пустую полемику.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.