Скачать MetaTrader 5

Leak of memory...

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Sergey Sartakov
1287
Sergey Sartakov  

при завершение работы советник выдает такого типа сооющения :

200(или 300 или 580 или ...) bytes of leaked memory 

Единственное, что уменя есть там относительно памяти - это динамические массивы abc[],

ArrayResize(abc, ...)

Получается, что терминал не может отдать память в чистему ? 

Alexey Subbotin
4998
Alexey Subbotin  
Хех, и не одного объекта или структуры? У меня обычно говорит, какого типа ресурсы остались в памяти
Sergey Sartakov
1287
Sergey Sartakov  
alsu:
Хех, и не одного объекта или структуры? У меня обычно говорит, какого типа ресурсы остались в памяти


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

struct k_PartialClose
{
   string s_ProfitName[];
   double d_ProfitPrice[];
   double d_LotsToClose[];
};

k_PartialClose gka_PartClose[MAX];

Объявлены на глобальном уровне....

 

o_o
Модератор
23920
o_o  
more:

Получается, что терминал не может отдать память в чистему ? 


нет, бОльшая вероятность, что не вызывается оператор delete после использования new
Sergey Sartakov
1287
Sergey Sartakov  
sergeev:

нет, бОльшая вероятность, что не вызывается оператор delete после использования new


я New не использую нигде....

Vadim Zhunko
5226
Vadim Zhunko  

Сергей, у тебя с точки зрения проектирования, неправильная конструкция - структура массивов. Это неправильная задача или неправильное решение. Не должно быть такого.

Нормально массив структур, но наоборот неправильно. 

Sergey Sartakov
1287
Sergey Sartakov  
Zhunko:

Сергей, у тебя с точки зрения проектирования, неправильная конструкция - структура массивов. Это неправильная задача или неправильное решение. Не должно быть такого.

Нормально массив структур, но наоборот неправильно. 

struct k_PartialClose
{
   string s_ProfitName[];
   double d_ProfitPrice[];
   double d_LotsToClose[];
};

k_PartialClose gka_PartClose[MAX];

а чего тут такого ? у меня и есть массив структур, а структура включат динамические массивы,

по документации тут нет ничего крамольного...

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

 

наверное придется перенести все такие объявы на локальный уровень - не функции, нет и переменной... 

o_o
Модератор
23920
o_o  
more:

а чего тут такого ? у меня и есть массив структур, а структура включат динамические массивы,

по документации тут нет ничего крамольного...

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


тут тогда вопрос (не в тему топика) - соблюдаешь ли ты в массивах структуры порядок каждого массива?


то есть является ли элемент в массива строк ProfitName[X] обязательно соответствующий элементу ProfitPrice[X] и элементу LotsToClose[X]

или нет?

если таки да, то лучше делать структуру данных одного элемента, чтоб логически это смотрелось точнее (вспомни MqlRates, где имеется не массив high[], low[] и т.д. а только один элемиент бара)

а потом уже загонять её в массив массивов

o_o
Модератор
23920
o_o  
а касательно утечки - вопрос серъезный. если получится воспроизвести, то обязательно дай код в сервисдеск.
Sergey Sartakov
1287
Sergey Sartakov  
sergeev:

тут тогда вопрос (не в тему топика) - соблюдаешь ли ты в массивах структуры порядок каждого массива?


то есть является ли элемент в массива строк ProfitName[X] обязательно соответствующий элементу ProfitPrice[X] и элементу LotsToClose[X]

или нет?

если таки да, то лучше делать структуру данных одного элемента, чтоб логически это смотрелось точнее (вспомни MqlRates, где имеется не массив high[], low[] и т.д. а только один элемиент бара)

а потом уже загонять её в массив массивов

struct k_PartialClose
{
   string s_ProfitName[];
   double d_ProfitPrice[];
   double d_LotsToClose[];
};

k_PartialClose gka_PartClose[MAX];

может и не совсем удачно получилось. 

смысл такой - каждый i-ый ордер gka_PartClose[i] может иметь нескольео уровней  TakeProfit - d_ProfitPrice[], на каждом 

из которых необходимо производить частичное закрытие позиции объемом d_LotsToClose[].

количество уровней для каждого ордера может быть свое - ArrayResize(gka_PartClose[i].d_ProfitPrice, LevelsCount).

Если что-то можно проще, посоветуй... 

Sergey Sartakov
1287
Sergey Sartakov  
sergeev:
а касательно утечки - вопрос серъезный. если получится воспроизвести, то обязательно дай код в сервисдеск.


Надо специально написать програмку, работающуб с такого типа структурами :

 struct k_PartialClose

{
   string s_ProfitName[];
   double d_ProfitPrice[];
   double d_LotsToClose[];
};

k_PartialClose gka_PartClose[MAX];
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий