Variecs
offline
Опыт:
2,508Активность: |
Триггер запускается без проверки условия
После того, как условие единожды возвращает положительный результат, проверка этого условия вообще прекращается и триггер запускается без неё. Не подскажете, в чём проблема? Текст триггера:
Код:
|
09.03.2013, 17:48 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
мазохист
рекомендую
Hate добавил:
Hate добавил:
|
09.03.2013, 18:01 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
Hate, для этого триггера - возможно, но многие такие проверки будут происходить очень часто, и если утечку не убрать... ну ты понел. Тем более что такие проверки я просто копипастю с уже существующих, меняя только тип юнита.
|
09.03.2013, 18:03 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
какая утечка? вы наркоман? |
09.03.2013, 18:10 | #4
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Киря
offline
Опыт:
769Активность: |
Variecs, слишком много лишнего кода.
Hate правильно написал. Зачем инициализировать лишние переменные, если они используються единожды. Вызывай функции напрямую.
А почему бы сразу не использовать
Возможно проблема кроется именно в этих излишках. Почисти и проверь еще раз. |
09.03.2013, 18:11 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
~Hate,
Код:
я чего-то не понимаю? Variecs добавил: Я прекрасно знаю, как можно писать короче, и с удовольствием так бы сделал, однако учитывая тот факт, что многие триггеры у меня будут вызываться по 20 раз в секунду, хвосты вроде неудаленных ссылок на юнитов могут сыграть со мной злую шутку. |
09.03.2013, 18:14 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
у вас лишние переменные, утечки в моем коде нету, хоть об стенку разбейтесь, идите читайте статьи по jass |
09.03.2013, 18:17 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Киря
offline
Опыт:
769Активность: |
Variecs, забавно.)
Ты в правду считаешь, что
со временем вызовет утечку?
Безусловно, если ты инициализировал переменную типа unit, то по завершению работы с ней ты должен её обнулить. Но судя из твоих слов ты уже при инициализации типа
получаешь утечку.) |
09.03.2013, 18:19 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Выравнивайте руки об асфальт, хоть бы почитали про оптимизацию, удалятели всего подряд. |
09.03.2013, 18:20 | #9
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
Читал и, по-видимому, упоролся. Не понимаю причины, почему утечки нет.
Variecs добавил: Насколько я понял, утечка возникает по причине того, что вызываемая функция сохраняет возвращаемый результат где-то в лесу, где впоследствии он не обнуляется. Чтобы утечка не возникала, надо возвращать результат в какую-то переменную, которую потом можно обнулить. Но сейчас у меня такое ощущение, что всё это относится к какой-то другой вселенной, а я упорот. Боюсь, ощущение правдиво. |
09.03.2013, 18:29 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
почитайте еще раз, и еще раз, в общем читайте до тех пор пока не поймёте. |
09.03.2013, 18:30 | #11
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
а почему она должна быть? |
09.03.2013, 18:30 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
Hate,
Цитата:
Так я думал. Boy will i change my mind. |
|
09.03.2013, 18:50 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Vadik29
Choice Battle 1.6а
offline
Опыт:
15,245Активность: |
Variecs, Код бред, читай про оптимизацию, все ваши проверки можно легко оптимизировать и убрать лишние переменные. Также советую на такие случаи, создавать глобальный булэкспр, чтобы избежать лишние действия.
В данном случае можно без переменной.
Вроде как так. Отредактировано Vadik29, 09.03.2013 в 19:34. |
09.03.2013, 19:28 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
Чтобы избежать в дальнейшем такого нелепого недопонимания:
Код:
Здесь нет утечек? |
09.03.2013, 20:00 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Киря
offline
Опыт:
769Активность: |
Variecs:
TriggerUnit - это юнит, для которого сработало событие. В это время он присутствует у тебя на карте, ты его видишь. GetTriggerUnit() возвращает ссылку на данного юнита (указатель что-ли). Он не копирует этого юнита. |
09.03.2013, 20:00 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
Variecs:
нету |
09.03.2013, 20:01 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
Всё, не вижу смысла объяснять суть, почему мой код изобилует таким безобразием, главное я понял, в каких ситуациях возникают утечки. Когда поменяю, отпишусь, но вдруг ошибка не в этом, так что тему пока желательно оставить.
Ах да, и спасибо. |
09.03.2013, 20:06 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
причину вашей проблемы описал диод в посте номер 9, вы удаляете свой кондишн, т.к. слишком увлеклись оптимизацией и попытками сделать совершенный и идеальный код. Печально то, что вы в этих попытках как раз избрали не верный путь, и неверное решение вследствие незнания. Пожалуйста, будьте внимательнее. |
09.03.2013, 20:20 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Variecs
offline
Опыт:
2,508Активность: |
Я удаляю кондишн для динамического триггера, а условие перестает работать для базового.
|
09.03.2013, 20:36 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|