Ошибки, баги, вопросы - страница 1812
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
"Доктор, у меня что-то болит!" © )
Пример-то покажите такого выражения. Воспроизводимый. Тогда и ответить что-то можно будет.
{
int d1;
ulong i, frac1=frac, ll1=ll, type1=type;
i=1; d1=10;
while (ll>=d1) {d1=d1*10; i=i+1;}
if (type==0 || type==2) return (frac1+ll1*Pow10frac_length+i*Pow10(frac_length+i)+
type1*Pow10(frac_length+i+1)+bs*Pow10(frac_length+i+2)+Id1_class*Pow10(frac_length+i+3));
else return(ll1+i*Pow10(i)+type1*Pow10(i+1)+bs*Pow10(i+2)+Id1_class*Pow10(i+3));
}
ulong Pow10(ulong power) // power>0
{
ulong r=10;
if (power==0) return 1;
for (ulong i=2; i<=power; i++) r=r*10;
return r;
}
Проблема в функции PackMagic. Внешние переменные int frac_length=2; int Pow10frac_length=100; int Id1_class=1;.
Вы пример ошибки-то не привели. При каких значениях аргументов эта функция возвращает неправильное значение (какое?) и каким должен быть правильный результат?
Например:
Id1_class=1, bs=0, type=0, frac=99, ll=1, frac_length=2, Pow10frac_length=100, return возвращало 11299.
Должно быть 1001199. В эксперте, функции в классе, демо-счёт в Открытии.
Не факт, что всегда в случае ошибки будет возвращаться 11299.
Воспроизвелось. Записал ваш код в скрипт, он при запуске в режиме отладки выдаёт правильное значение (1001199), а если скомпилировать релиз и запускать его из дерева в МТ5, то стабильно выдавал 11199. Смог локализовать проблему, вот воспроизводящий её код:
void OnStart()
{
ulong i = 1;
ulong a1 = Pow10(frac_length + i);
ulong a2 = Pow10(frac_length + i + 1);
ulong a3 = Pow10(frac_length + i + 2);
ulong a4 = Pow10(frac_length + i + 3);
Print(IntegerToString(a1), " ", IntegerToString(a2), " ", IntegerToString(a3), " ", IntegerToString(a4));
}
ulong Pow10(const ulong power)
{
ulong r = 10;
if (power == 0)
return 1;
for (ulong i = 2; i <= power; i++)
r = r*10;
return r;
}
В режиме отладки он отрабатывает правильно. А вот при запуске релиза из навигатора в МТ5 либо выдаёт ерунду ("1000 10000 100 100" вместо "1000 10000 100000 1000000"), либо МТ5 вообще зависает с полной загрузкой одного из ядер процессора.
Лечится двумя способами. Либо так:
ulong a2 = Pow10(frac_length + i + (ulong)1);
ulong a3 = Pow10(frac_length + i + (ulong)2);
ulong a4 = Pow10(frac_length + i + (ulong)3);
Либо переносом глобальной переменной frac_length внутрь функции Start().
Это действительно баг компилятора, пишите в сервисдеск.
При наведении на только что опубликованный собственный отзыв к Маркет-продукту появляется несколько предложений/действий. Если выбрать "правка" и изменить отзыв, то после нажатия на "Обновить" выскочит ошибка "Нет прав".
Заявку в СД не создать - Произошла ошибка.
При наведении на только что опубликованный собственный отзыв к Маркет-продукту появляется несколько предложений/действий. Если выбрать "правка" и изменить отзыв, то после нажатия на "Обновить" выскочит ошибка "Нет прав".
Уточните, пожалуйста, название и версию своего браузера.
На хроме 56.0.2924.87 полет нормальный, как с, так и без ручного обновления страницы отзыва.
Заявку в СД не создать - Произошла ошибка.
Видимо, было проведено обновление принципов проверки анти-CSRF токенов.
В хроме это можно сделать так:
Нажать F12 находясь на сайте www.mql5.com => на панели разработчика перейти во вкладку Application => раздел Cookies => ПКМ на записях cookies => Clear all from ...
Уточните, пожалуйста, название и версию своего браузера.
На хроме 56.0.2924.87 полет нормальный, как с, так и без ручного обновления страницы отзыва.