Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Неинициализация массива - это целиком и полностью вина кодопистаеля. Ищите ошибки у себя. Перестраивайте свой алгоритм.
Ошибки нет.
Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. Из за этого, необходимо самостоятельно очищать массив перед использованием. Это не всегда удобно.
Ошибки нет.
Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. Из за этого, необходимо самостоятельно очищать массив перед использованием. Это не всегда удобно.
А как Вы хотели? Писать безалаберно в стиле "4"? Бездумно запрашивать несуществующие индексы? Надеяться на "дядю" который за Вас проинициализирует Ваши массивы?
MQL5 таким любителям сильно и сразу лупит по рукам - дабы не повадно было. Учитесь сразу писать правильно: если создали массив - значит обходите все индексы и заполняйте. Не хотите заполнять сразу - заполняйте по-шагам с предварительным увеличением размера массива.
В общем делайте сразу нормальный алгоритм и не перекладывайте свои проблемы на других.
А как Вы хотели? Писать безалаберно в стиле "4"? Бездумно запрашивать несуществующие индексы? Надеяться на "дядю" который за Вас проинициализирует Ваши массивы?
MQL5 таким любителям сильно и сразу лупит по рукам - дабы не повадно было. Учитесь сразу писать правильно: если создали массив - значит обходите все индексы и заполняйте. Не хотите заполнять сразу - заполняйте по-шагам с предварительным увеличением размера массива.
В общем делайте сразу нормальный алгоритм и не перекладывайте свои проблемы на других.
Предварительная очистка массива - едва ли приводит к каким либо ошибкам. Она удобна.
В МТ5 - объявил массив, вычистил мусор, далее - используешь.
В МТ4 - объявил массив и используешь.
Вот и вся разница.
Зачем перекладывать на пользователя задачу очистки массивов?
Повышает ли это его профессионализм? Возможно. Но положительных эмоций точно не прибавит.)) Так что, извиняйте за мой негатив. Я несколько дней не мог понять в чем дело. Накипело.))
Ошибки нет.
Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. Из за этого, необходимо самостоятельно очищать массив перед использованием. Это не всегда удобно.
Петр, инициализация снята, потому что эта процедура занимает время, а в С++ и MQL5 не принято платить за то, чем не пользуешся. Инициализация массива требуется далеко не всегда, например если массив сразу заполняешь нужными значениями, она не нужна.
И все равно из твоего впороса не понятно в чем сложность. Ведь ты всегда знаешь размер своего массива. Если ты делаешь переразметку массива, ты всегда знаешь сколько дополнительных элементов добавляешь в него. Следовательно не составляет труда вызвать функцию ArrayInitialize следом за ArrayResize.
Ты наверное спросишь, как люди пользуются MQL5 когда нужно дополнительно учитывать столько моментов? Отвечу: те кто пользуется MQL5 на хорошем уровне, используют стандартную библиотеку, поэтому обо всех этих пустяках даже не задумываются, они не занимаются инициализацией массива или его переразметкой, а просто добавляют новые значения. Но так как ты дартаньян, и не признаешь ничего такого, то вариант у тебя один: низкоуровневый кропотливый менеджемент своих массивов, с использованием ArrayInitialize.
1. Петр, инициализация снята, потому что эта процедура занимает время, а в С++ и MQL5 не принято платить за то, чем не пользуешся. Инициализация массива требуется далеко не всегда, например если массив сразу заполняешь нужными значениями, она не нужна.
2. И все равно из твоего впороса не понятно в чем сложность. Ведь ты всегда знаешь размер своего массива. Если ты делаешь переразметку массива, ты всегда знаешь сколько дополнительных элементов добавляешь в него. Следовательно не составляет труда вызвать функцию ArrayInitialize следом за ArrayResize.
3. Ты наверное спросишь, как люди пользуются MQL5 когда нужно дополнительно учитывать столько моментов? Отвечу: те кто пользуется MQL5 на хорошем уровне, используют стандартную библиотеку, поэтому обо всех этих пустяках даже не задумываются, они не занимаются инициализацией массива или его переразметкой, а просто добавляют новые значения. Но так как ты дартаньян, и не признаешь ничего такого, то вариант у тебя один: низкоуровневый кропотливый менеджемент своих массивов, с использованием ArrayInitialize.
Василий, по-пунктно:
1. Логика подсказывает, что процедура очистки массивов выполняется компилятором один раз на этапе компиляции. Если ее сняли, значит хотели увеличить быстродействие компилятора в ущерб удобству программиста, но возможно для повышения его уровня.
2. Размер ядра зависит от Киб-кода. Чем больше элементов, тем больше массив ядра. Поэтому, ядро динамично. Оно строится поэтапно. Если в его ячейках мусор, то ссылки одной ячейки на другую в функциях на разных этапах построения, приводят к вылету программы.
В МТ4 такой проблемы не было, потому что неинициализированные ячейки были нулями, а не случайными значениями. Короче, моя технология должна работать изначально с чистым массивом.
3. Я не против принудительной пользовательской очистки массивов, просто, как и говорил, накипело. Несколько дней не понимал, почему все крашится. Думал, дело во мне, оказалось, - у меня забрали одно из удобств.))
Ничего, приспособимся.))
ЗЫ. Кстати, должен сказать, что мой код абсолютно кросс-платформенный. Мне кроме этой очистки ничего не нужно менять!
Ошибки нет.
Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. ...
Для того, что бы иметь возможность писать быстрые программы. Инициализация далеко не всегда нужна, чаще массив сразу заполняется своими данными.
Для того, что бы иметь возможность писать быстрые программы. Инициализация далеко не всегда нужна, чаще массив сразу заполняется своими данными.
Ок. Понятно.
... Если в его ячейках мусор, то ссылки одной ячейки на другую в функциях на разных этапах построения, приводят к вылету программы.
Петр, если в твоем ядре мусор, то только ты ответственен за это. MQL5 в отличии от MQL4 не пытается понять что хочет пользователь и это правильно.