Следующий код приводит к падению терминала:
Не перестаю удивляться, скоко же ещё багов припасено в закромах MQL4...
пасхальные яйца...
где то была куча приколов как уронить винды и ничего - винды стоят на большинстве PC в мире
вы же понимаете разницу между феррари и навороченым кадилаком
--
на кадилаке надо ехать по центральной улице города 30 км час, что бы Вас успели рассмотреть все ... показать вашу состоятельность
на феррари надо гнать по автобану на огромной скорости - с красивой блондинкой на переднем сидении
---
писать программы на Си++ это все равно, что ехать на феррари но если вы где то улетели за границы массива - или допустили
несуразицу в коде с массивом = авария
---
язык MQL вырос из Си
---
одно и то же можно сказать по разному
напишите код по иному
/* этот код роняет MT string array[100]; array[1]="a"+"b"; string txt=array[1]; txt=txt+txt; */ // этот код делает то же самое но не роняет string array[100]; string txt; string TMPtxt; array[1]="a"+"b"; txt=array[1]; TMPtxt=txt+txt; txt = TMPtxt;
...
но если вы где то улетели за границы массива - или допустили несуразицу в коде с массивом = авария
...
напишите код по иному
Где вы тут увидели "за границы массива" или "несуразицу в коде"? Не надо писать ерунду. Это очевидный баг MQL4. И уж Си тут совершенно не при чём.
Код по иному то я разумеется себе переписал (вместо txt+txt поставил StringConcatenate(txt,txt), а заводить лишнюю переменную как в вашем примере мне как-то не хочется). Но это отнюдь не значит что данную ошибку не нужно исправлять разработчикам. Я потратил кучу времени, пока выискивал в своём коде причину падения терминала. Это здесь я уже написал такой простой демонстрационный код в явном виде, а у меня в программе всё было гораздо сложнее, с участием многомерных массивов и функций. А добравшись до сути, оказалось что тут просто баг в обработке строковых переменных.
Самый быстрый способ завершиь работу терминала:) Закрывется моменально!
Только это не баг.
Где вы тут увидели "за границы массива" или "несуразицу в коде"? Не надо писать ерунду. Это очевидный баг MQL4. И уж Си тут совершенно не при чём.
Код по иному то я разумеется себе переписал (вместо txt+txt поставил StringConcatenate(txt,txt), а заводить лишнюю переменную как в вашем примере мне как-то не хочется). Но это отнюдь не значит что данную ошибку не нужно исправлять. Я потратил кучу времени, пока выискивал в своём коде причину падения терминала. Это здесь я уже написал такой простой демонстрационный код в явном виде, а у меня в программе всё было гораздо сложнее, с участием многомерных массивов и функций. А добравшись до сути, оказалось что тут просто баг в обработке строковых переменных.
да я все прекрасно понимаю.. ну что Вы :-) - вот уж не хотел вас как то задеть
и вполне возможно ваши манипуляции с массивом и переменными не являются несуразицей в вашем реально коде
---
обошли баг - "поехали дальше" можно завести переменную а можно применить иную конструкцию
я писал пример быстро, Вы что от меня хотите блестящий код ?
---
главная мысль была - в том что такие баги надо обходить применив иные конструкции...
---
Си достаточно хороши вылизан...
но он тут при том что MQL вырос из Си
и точно так же не контролирует если вы улетите за массив...
или обратитесь через указатель к куску памяти несуществующему или находящемуся вне пределах программы
Ну да, любые баги можно обойти, я с этим не спорю. И приходится. Никуда не денешься. Но это честно говоря не очень приятно. Иной раз приходится обходить что называется "через жопу". За последние 2 дня это уже 3-й обнаруженный мной баг. Он то конечно в плане обхода очень прост и особых неудобств не доставляет. Но бывают вещи и посерьёзнее
Ну да, любые баги можно обойти, я с этим не спорю. И приходится. Никуда не денешься. Но это честно говоря очень не нравится, иной раз приходится обходить что называется "через жопу". За последние 2 дня это уже 3-й обнаруженный мной баг. Он то конечно в плане обхода очень прост и особых неудобств не доставляет. Но бывают и посерьёзнее
обычно бьешься над проблемой и убиваешь время на это
а потом выясняется что ты все делаешь правильно - а это ошибка - баг
такие штуки искать сложно именно потому что делаешь все правильно!
---
потому я предпочел бы добавить лишнюю переменную - и быстро пойти дальше - чем искать красивую конструкцию
или писать код может не (изящьно - красиво )- а классически ... более спокойно т е не супер универсально
предпочитая может быть вместо универсальной функции 3 не универсальные ( кстати при этом возможно при модификациях - сопровождении я еще потом выиграю
когда выяснится, что универсальность разбивается изменениями которые надо внести )
пусть он будет может не такой красивый - зато надежный и легко модифицируемый в дальнейшем и понятный
---
В продолжение о багах...
Индикатор обращается к функции библиотеки Lib1 f1(double& in[][6],double& out[][4]) и передает массив. В свою очередь функция f обращается к функции другой библиотеки Lib2
f2(double& in[][6],double& out[][6]) и передает массив для обработки дальше. Индикатор не работает.
Но если f1 и f2 поместить в код индикатора - Все прекрасно.
В доке пояснений не нашел. Ссылки через #import есть. Это баг? или так задумано?
2. В MQL-4 ушатывает почти все, (не дает творить))), но когда понимаешь почему это - улыбаешься еще шире.
3. Насчет массивов - не сердитесь, а перепишите в другой массив.
В продолжение о багах...
Индикатор обращается к функции библиотеки Lib1 f1(double& in[][6],double& out[][4]) и передает массив. В свою очередь функция f обращается к функции другой библиотеки Lib2
f2(double& in[][6],double& out[][6]) и передает массив для обработки дальше. Индикатор не работает.
Но если f1 и f2 поместить в код индикатора - Все прекрасно.
В доке пояснений не нашел. Ссылки через #import есть. Это баг? или так задумано?
Задуманно.
1. Кстати, до 196-й сборки txt = txt + txt; вообще не работало, а только через вызов конкатенации.
2. В MQL-4 ушатывает почти все, (не дает творить))), но когда понимаешь почему это - улыбаешься еще шире.
3. Насчет массивов - не сердитесь, а перепишите в другой массив.
Да не. Я вообще сержусь редко. Это я для информации. MetaTrader -это меньшее зло :)
Видел проги и хуже... Здесь по принципу - не нравится - не ешь
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Следующий код приводит к падению терминала:
Не перестаю удивляться, скоко же ещё багов припасено в закромах MQL4...