#property description "Cet indicateur ne calcule pas de valeurs. Il effectue une tentative" #property description "d'appeler la fonction ArrayFree() sur 3 tableaux : dynamique, statique et " #property description "un buffer d'indicateur. Les résultats sont affichés dans le journal de l'Expert." //--- paramètres de l'indicateur #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- variables globales double ExtDynamic[]; // tableau dynamique double ExtStatic[100]; // tableau statique bool ExtFlag=true; // flag double ExtBuff[]; // buffer de l'indicateur //+------------------------------------------------------------------+ //| Fonction d'initialisation de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnInit() { //--- alloue la mémoire du tableau ArrayResize(ExtDynamic,100); //--- mapping des buffers de l'indicateur SetIndexBuffer(0,ExtBuff); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Fonction d'itération de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- effectue une analyse simple if(ExtFlag) { //--- tentative de libérer la mémoire des tableaux //--- 1. Tableau dynamique Print("+============================+"); Print("1. Vérification du tableau dynamique :"); Print("Taille avant que la mémoire ne soit libérée = ",ArraySize(ExtDynamic)); Print("Est-ce que c'est un tableau dynamique = ",ArrayIsDynamic(ExtDynamic) ? "Oui" : "Non"); //--- tentative de libérerr la mémoire du tableau ArrayFree(ExtDynamic); Print("Taille après la libération de la mémoire = ",ArraySize(ExtDynamic)); //--- 2. Tableau statique Print("2. Vérification du tableau statique :"); Print("Taille avant que la mémoire ne soit libérée = ",ArraySize(ExtStatic)); Print("Est-ce que c'est un tableau dynamique = ",ArrayIsDynamic(ExtStatic) ? "Oui" : "Non"); //--- tentative de libérerr la mémoire du tableau ArrayFree(ExtStatic); Print("Taille après la libération de la mémoire = ",ArraySize(ExtStatic)); //--- 3. Buffer de l'indicateur Print("3. Vérification du buffer de l'indicateur :"); Print("Taille avant que la mémoire ne soit libérée = ",ArraySize(ExtBuff)); Print("Est-ce que c'est un tableau dynamique = ",ArrayIsDynamic(ExtBuff) ? "Oui" : "Non"); //--- tentative de libérerr la mémoire du tableau ArrayFree(ExtBuff); Print("Taille après la libération de la mémoire = ",ArraySize(ExtBuff)); //--- change la valeur du flag ExtFlag=false; } //--- retourne la valeur de prev_calculated pour le prochain appel return(rates_total); } |