ошибка при работе с CArrayString

 

Почему так работает:

#include <arrays\\arraystring.mqh>

void OnStart(){
  
  CArrayString* arr = new CArrayString ;
  arr.Add("123");
  
}

а так:

#include <arrays\\arraystring.mqh>

void OnStart(){
  
  CArrayString arr;
  arr.Add("123");
  
}

при запуске скрипта из под терминала выдает ошибку:

2009.12.06 23:58:28 stringret (#SIZ9,M5) Zero divide in 'arraystring.mqh' (133,63)

если запускать скрипт из под отладчика, то ошибки нет, отрабатывает нормально

где тут деление на ноль:

new_size=m_data_max+m_step_resize*(1+(size-Available())/m_step_resize);

если m_step_resize

инициализируется в родительском классе в конструкторе:

void CArray::CArray()
  {
//--- initialize protected data
   m_step_resize=16;
   m_data_total =0;
   m_data_max   =0;
   m_sort_mode =-1;
  }
 
Обычное добавление индикатора DPO приводит к:

2009.12.06 20:26:46 DPO (EURUSD,H4) Zero divide in 'MovingAverages.mqh' (107,19)

 

Заметил на билде 227. На предыдущих билдах такого не было. Обновлений так и нет с 26 ноября...

 

У меня раз пять была ошибка деление на ноль в местах, где деления на ноль нет.

По шагам в отладчике получаем, например, 1,5 и 2. 1,5/2 - деление на ноль.


В первый раз перегрузил терминал и редактор и пошло.

В другой раз разбил выражение на составляющие по переменным.


Повторить ту же ошибку отдельно не получается.

Все работает нормально. А в этом кусочке кода сбоит.


Ваш код

#include <arrays\\arraystring.mqh>

void OnStart(){
  
  CArrayString arr;
  arr.Add("123");
  
}

работает у меня на 227 билде нормально. Возможно и у Вас заработает после перезагрузки...


А вот индикатор DPO дает :)


DPO (EURUSD,M1)    Unhandled exception 0xC0000005

....

DPO (EURUSD,H4)    Unhandled exception 0xC0000005

 

 


 

такая конструкция:

 

#include <arrays\\arraystring.mqh>

CArrayString arr;
void OnStart(){
  
  
  arr.Add("123");
  
}

приводит к какому то бесконечному внутреннему циклу с наглым захватом процессора:

 

 

 

 

 до кнопки "experts list-remove" добраться удается, но после ее нажатия терминал виснет. 

 

 

 


скачивание дистрибутива и переустановка всех библиотек проблему не решили.

 

не стал новую тему открывать.

 

что обозначает сия ошибка компиляции:

 

 

 

 

которая исчезает после комментирования кода:

 

while( Total() ){
        delete Detach(0);
}
находящегося в "Table.mqh" 

 

господа разработчики, маякните, что стоит описывать подобного рода проблемы, а то возникает чувство, что пишу вникуда. Может будете отписывать: "да баг, будем искать и исправлять", "нет, скорее всего ошибка пользователя, обращение не по адресу". Стоит ли писать проблемы в самостоятельно созданные ветки, или может есть уже специально открытая, и вообще стоит ли писать, засорять форум, а то может только на офицальных бетатестеров внимание обращают.

 

 

 
gdtt :

 

господа разработчики, маякните, что стоит описывать подобного рода проблемы, а то возникает чувство, что пишу вникуда. Может будете отписывать: "да баг, будем искать и исправлять", "нет, скорее всего ошибка пользователя, обращение не по адресу". Стоит ли писать проблемы в самостоятельно созданные ветки, или может есть уже специально открытая, и вообще стоит ли писать, засорять форум, а то может только на офицальных бетатестеров внимание обращают.


Спасибо за сообщения. Сегодня выходит билд, который содержит ряд исправлений (в том числе и оптимизатора). Пожалуйста, перепроверьте Ваш скрипт после обновления.


проверил код

while( Total() ) { delete Detach(0); }

компилироваться в новом билде не будет, пока используйте следующую конструкцию:

while( Total() )
{
СYourClassName *ptr=Detach(0);
delete ptr;
}
 
mql5 :


Спасибо за сообщения. Сегодня выходит билд, который содержит ряд исправлений (в том числе и оптимизатора). Пожалуйста, перепроверьте Ваш скрипт после обновления.


проверил код

компилироваться в новом билде не будет, пока используйте следующую конструкцию:

#include <arrays\\arraystring.mqh>


void OnStart(){
  
  CArrayString arr;
  arr.Add("123");
  
}

228 билд

деление на ноль перестало быть. при выполнении срипта сообщение об успешной загрузке. нет сообщения об успешной выгрузге. забирает 100 процентов процессорного времени. по кнопке "remove" терминал виснет. 

 

 

 

аналогичная история при выполнении скрипта:

 

#include <Table.mqh>

void OnStart()
  {
//---
  int i;
  i= 1;
  CTable* Tab;
  Tab = new CTable;
  
  Tab.LoadFromFile("nonfarmhistory.csv");
  Tab.Print();
  Print("after print");
  delete Tab;
  Print("after delete tab");
  }

 

если пройти в отладчике, то повисание происходит внутри "delete Tab" на следующем шаге по нажатию f11:

 

 

 

что то не так в работе деструкторов.

 

товарищи-коллеги прогоните плиз это, отпишитесь, виснет терминал или нет, может у меня что не так с двумя разными машинами, одна под вистой, другая по ихпи.

 


 

форум не дает прикрепить файл csv - так и надо? как его прилепить сюда?

 

 

вот это вот: http://ifolder.ru/15364144 файл записать в папку mql5\files

Файлы:
settable.mq5  1 kb
table.mqh  6 kb
 
gdtt :

форум не дает прикрепить файл csv - так и надо? как его прилепить сюда?

CSV файл можно прикрепить, заархивировав его в ZIP.

 

Спасибо, ошибка в работе с динамическим массивом исправлена, ждите обновлений.



Чтобы продолжить работать до обновления, Вы можете внести исправление в ArrayString.mqh, строку 173

if(ArrayResize(m_data,0)==-1) return(false);

заменить на

ArrayFree(m_data);
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
mql5 :

Спасибо, ошибка в работе с динамическим массивом исправлена, ждите обновлений.




229 билд. все тот же скрипт. деструкторы отрабатывают, скрипт не виснет, работает, но только один раз. при повторном запуске:

 

 

билд 230

заработало 

Причина обращения: