ローソク足の形状を認識するインジケーターを作成しています。
class Candlestick
そのために、インディケータ ファイルに含める別のファイルを作成しました。
問題は、メモリリークに悩まされていることです。
私はポインターに慣れていないので、たくさん読んだり見たりした後でも、ここで何かを見逃しているようです。
これは Indicator クラスです。授業内容Candlestick
は関係ないので割愛します。
Candlestick *candles[];
void OnDeinit(const int reason)
{
for(int i = 0; i < ArraySize(candles); i++ ){
delete(candles[i]);
}
}
int OnCalculate(args here)
{
ArrayResize(candles, Bars);
for(int i = MathMax(Bars-2-IndicatorCounted(), 1); i >= 0; i--)
{
candles[i] = new Candlestick();
// Do stuff with this candle (and other candles) here e.g.
if(candles[i+1].type == BULLISH) Print("Last candle was Bullish");
}
}
これを行うと、メモリリークエラーが発生します。その動的配列のろうそくへのポインタを削除する必要があるようです。問題は、いつ、どこで?for(){...}
ループの次の反復でそれらが必要になるためです。だからそこは消せない。
関数でそれを削除すると、OnDeinit()
まだろうそくが残っていて、まだリークエラーが発生します。
どうして?