забавный баг

Ошибки и баги Unity3D

забавный баг

Сообщение mrcoder 22 сен 2012, 11:58

for (int i=0; i<20 ; i=i++) :-B
первый запуск приложения стартует и работает нормально, а вот повторный вешает юнити намертво, нагружая цпу на максимум.

возможно в ю-4 этого нет.
возможно так же что это баг не только юнити но и дотнета. (popcorn1)
Аватара пользователя
mrcoder
Старожил
 
Сообщения: 704
Зарегистрирован: 28 июн 2012, 22:40

Re: забавный баг

Сообщение pod4444 22 сен 2012, 12:05

я не знаю как у вас вообще работает строчка
Синтаксис:
Используется csharp
i=i++
 


i++ эквивалентно i = i + 1, у вас получается i = i = i + 1
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: забавный баг

Сообщение mrcoder 22 сен 2012, 12:06

не копался, но если баг нета, то вероятно и шелл залить реально, причем исходником). в том числе продвинутому юзеру, который сам же просмотрев сорцы - убедится что зловреда так никакого нет (не заметив эту маленькую неточность) ;)
Аватара пользователя
mrcoder
Старожил
 
Сообщения: 704
Зарегистрирован: 28 июн 2012, 22:40

Re: забавный баг

Сообщение mrcoder 22 сен 2012, 12:09

pod4444 писал(а):я не знаю как у вас вообще работает строчка

дело не в том что и как работает.
а в том что компилятор ее пропускает и этот код вешает процесс и вешает не стабильно.
не буду разжевывать, как такие ошибки используются :-B
Аватара пользователя
mrcoder
Старожил
 
Сообщения: 704
Зарегистрирован: 28 июн 2012, 22:40

Re: забавный баг

Сообщение Good1101 22 сен 2012, 16:39

Да цикл никогда не завершается потому что i всегда 0
Синтаксис:
Используется csharp
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 2; i = i++)
            {
                Console.WriteLine("i = " + i);
            }
            Console.ReadLine();
        }
    }
 

вроде бы логически должно прибавятся единица к i, не совсем понимаю почему так.
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ

Re: забавный баг

Сообщение AndreyMust19 22 сен 2012, 17:24

i++ увеличивает i на 1, но возвращает при этом предыдущее i. А поскольку у = самый низкий приоритет, то переменной i значение присваивается в самом конце. В результате инкремент стирается и остается предыдущее значение.
А вообще - не советовал бы химичить с ин(де)крементами и промежуточными результатами. В зависимости от реализации таких операций в компиляторе (даже без ключей оптимизации) может получаться разный результат.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: забавный баг

Сообщение alexmarch 23 сен 2012, 22:21

Good1101 писал(а):Да цикл никогда не завершается потому что i всегда 0
Синтаксис:
Используется csharp
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 2; i = i++)
            {
                Console.WriteLine("i = " + i);
            }
            Console.ReadLine();
        }
    }
 

вроде бы логически должно прибавятся единица к i, не совсем понимаю почему так.

вы вот так запишите свою i
i = ++i
плюсики вперед поставите и цыкл будет работать как положенно
Аватара пользователя
alexmarch
UNITрон
 
Сообщения: 286
Зарегистрирован: 04 май 2009, 19:54


Вернуться в Глюки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1