#property description "Этот индикатор не вычисляет значений, а один раз пытается применить"
#property description "вызов функции ArrayFree() к трем массивам: динамическому, статическому и"
#property description "индикаторному буферу. Результаты выводятся в журнал экспертов."
//--- настройки индикатора
#property indicator_chart_window
#property indicator_buffers 1
//--- глобальные переменные
double ExtDynamic[]; // динамический массив
double ExtStatic[100]; // статический массив
bool ExtFlag=true; // флаг
double ExtBuff[]; // индикаторный буфер
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- выделим память для массива
ArrayResize(ExtDynamic,100);
//--- indicator buffers mapping
SetIndexBuffer(0,ExtBuff);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- проведем анализ один раз
if(ExtFlag)
{
//--- попробуем освободить память для массивов
//--- 1. Динамический массив
Print("+============================+");
Print("1. Проверка динамического массива:");
Print("Размер до освобождения памяти = ",ArraySize(ExtDynamic));
Print("Это динамический массив = ",ArrayIsDynamic(ExtDynamic) ? "Да" : "Нет");
//--- пытаемся освободить память массива
ArrayFree(ExtDynamic);
Print("Размер после освобождения памяти = ",ArraySize(ExtDynamic));
//--- 2. Статический массив
Print("2. Проверка статического массива:");
Print("Размер до освобождения памяти = ",ArraySize(ExtStatic));
Print("Это динамический массив = ",ArrayIsDynamic(ExtStatic) ? "Да" : "Нет");
//--- пытаемся освободить память массива
ArrayFree(ExtStatic);
Print("Размер после освобождения памяти = ",ArraySize(ExtStatic));
//--- 3. Индикаторный буфер
Print("3. Проверка индикаторного буфера:");
Print("Размер до освобождения памяти = ",ArraySize(ExtBuff));
Print("Это динамический массив = ",ArrayIsDynamic(ExtBuff) ? "Да" : "Нет");
//--- пытаемся освободить память массива
ArrayFree(ExtBuff);
Print("Размер после освобождения памяти = ",ArraySize(ExtBuff));
//--- изменим значение флага
ExtFlag=false;
}
//--- return value of prev_calculated for next call
return(rates_total);
} |