Ошибки, баги, вопросы - страница 2243
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В индикаторе mql4 перестал работать код. как исправить?
Редактор пишет 'ObjectSetInteger' - no one of the overloads can be applied to the function call
Сколько лет работало и вдруг перестало. Обидно однако.
Только зачем вы смешали два стиля? Если используете первую строку для задания кода стрелки, то тогда используйте и вторую в том же стиле:
Пытался загрузить новую версию индикатора в маркет. Тестирование завершилось с ошибками. Отчет по ошибкам, как на рисунке в приложении со следующим содержанием:
Может проблема в тестере?Только зачем вы смешали два стиля? Если используете первую строку для задания кода стрелки, то тогда используйте и вторую в том же стиле:
Спасибо, помогло.
2 стиля? Я и не знал про стили. Просто ранее можно было делать этот участок только так. Изменения произошли. Я более 10 лет программил на MQL4. А теперь разработчики поменяли язык и многие коды мои перестали работать. Я сильно разочарован. Не к лучшему произошли изменения. Это значит, что теперь мне туеву кучу кодов переделывать. Они хоть и старые, а пользы от них было на цельный вагон.
Пытался загрузить новую версию индикатора в маркет. Тестирование завершилось с ошибками. Отчет по ошибкам, как на рисунке в приложении со следующим содержанием:
Может проблема в тестере?Создайте пожалуйста заявку в сервисдеск, разберёмся
UPD: Нашёл Вашу заявку.
Освобождает буфер любого динамического массива и устанавливает размер нулевого измерения в 0.
При написании скриптов и индикаторов необходимость в использовании функции ArrayFree() может возникнуть не часто: так как при завершении работы скрипта вся использованная память сразу же освобождается, а в пользовательских индикаторах основная работа с массивами представляет собою доступ к индикаторным буферам, размеры которых автоматически управляются исполняющей подсистемой терминала.
Если в программе необходимо самостоятельно управлять памятью в сложных динамических условиях, то функция ArrayFree() позволит явным образом и немедленно освобождать память, занятую ненужным уже динамическим массивом.
Понимаете? Ненужным.
Естественно, что раз память от него освобождена, а потом вы её опять распределили при помощи задания размера массиву, то никто вам не гарантирует его содержимое.
Используйте инициализацию массива: ArrayInitialize()
Что значит никто не гарантирует содержимое? Если память была освобождена, то её уже нет, тогда каким боком берется мусор в ней? Или очистка памяти подразумевает дачу разрешения на использование этой памяти другой части программы, а вовсе не очистку по факту?
Что значит никто не гарантирует содержимое? Если память была освобождена, то её уже нет, тогда каким боком берется мусор в ней? Или очистка памяти подразумевает дачу разрешения на использование этой памяти другой части программы, а вовсе не очистку по факту?
ArrayResize не занимается зачисткой памяти, поэтому в ней и содержится мусор, от предыдущего "потребителя".
Это сделано для скорости, т.к. после выделения памяти массиву, в 99.99(9)% случаях пользователь будет "наполнять" её своими данными.
Спасибо, помогло.
2 стиля? Я и не знал про стили. Просто ранее можно было делать этот участок только так. Изменения произошли. Я более 10 лет программил на MQL4. А теперь разработчики поменяли язык и многие коды мои перестали работать. Я сильно разочарован. Не к лучшему произошли изменения. Это значит, что теперь мне туеву кучу кодов переделывать. Они хоть и старые, а пользы от них было на цельный вагон.
А разве не вот так код стрелки задавался до введения в mql4 ObjectSetXXX-функций?
Я тоже уже порядка 10 лет (может и больше - как время летит...) пишу на mql - уже подзабывать начинаю сугубо четвёрочные функции - пишу по возможности мультиплатформенный код.
ArrayResize не занимается зачисткой памяти, поэтому в ней и содержится мусор, от предыдущего "потребителя".
Это сделано для скорости, т.к. после выделения памяти массиву, в 99.99(9)% случаях пользователь будет "наполнять" её своими данными.
Тогда почему цифровые значения "мусора" константы, даже после перезагрузки терминала?
Лично я погорел на простом суммировании содержания ячеек другого массива, и долго ломал голову в чем беда
Тогда почему цифровые значения "мусора" константы, даже после перезагрузки терминала?
Лично я погорел на простом суммировании содержания ячеек другого массива, и долго ломал голову в чем беда
Не имеет значения, какие именно данные содержатся в неинициализированном массиве, в любой момент, данные могут поменяться, их значение никто не гарантирует.
Именно поэтому использование неинициализированных переменных (читать памяти) иногда приводит к ситуациям, с долгим поиском причины:
Могу лишь дать совет.
Необходимо вырабатывать привычку, всегда инициализировать данные, чтобы в будущем не тратить кучу времени на поиск ошибок связанных с отсутствием инициализации.
Что значит никто не гарантирует содержимое? Если память была освобождена, то её уже нет, тогда каким боком берется мусор в ней? Или очистка памяти подразумевает дачу разрешения на использование этой памяти другой части программы, а вовсе не очистку по факту?
Что значит "нет" ? Никто у вас планку памяти не вынимает из слота в материнской плате. А раз память присутствует, и она освобождена (не инициализирована значением, а именно освобождена), то она начинает использоваться под иные нужды программы.