エラー、バグ、質問 - ページ 1637

 
Slawa:

1.5か4か?私は4を推します。テスターウィンドウを拡大するだけです。

2.実際に持ってみて、テストする

ははは、どうもありがとうございました(mt4)
1366 x 768 (( 画面の1/3を引き伸ばす必要があります。
千里眼のスキルがレベルアップしていますね。

 
A100:

もっと簡単な例を挙げてみましょう。

形式的に言うと、A( A& )の種類の呼び出しは何回あるのでしょうか?ひとつ。少なくともC++は中間オブジェクトを生成しない

もしかして、C++ではRVO(戻り値の最適化)がデフォルトで設定されているのでは?
 
A100:

1.コピーコンストラクタのダブルコール

2.リークしたメモリ」のメッセージは表示されない(削除せずに新規作成)

  1. RVO(NRVOもある)の最適化については、今のところMQLコンパイラには入っていませんが、将来的に追加する予定です(今のところ、この最適化は非優先課題として考えています)。
  2. が再現されない場合は、再現のための重要な情報が指定されていない可能性がありますので、再確認してください。
 
Ilyas: 2.再現しない、再確認してください、再現のための重要な詳細を指定されていない可能性があります。

簡略化した例

class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    new A();
}

結果

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

結論:デストラクタが呼ばれず、同時にメモリーリークのメッセージも出ない(以下の例のように)。

//Script2.mq5
class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    A *a = new A();
}

結果

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16バイトのリークメモリー
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) タイプAのオブジェクトが1つ残っています。
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 未削除のオブジェクトが残っています。
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
分かりやすい説明ありがとうございます。再現-漏れのないメッセージとその理由はこちら。

ここでは、new 演算 子で作成されたメモリやポインタに対する操作がないため、このメモリの割り当てが削除され、オプティマイザが過剰に最適化されています。

この「バグ」をオプティマイザで修正するか、未使用の変数にポインタを保存しても新しい操作の削除がブロックされないように改善するか、検討します。

 
こんにちは。
MQL4とMQL5にはExpert Advisorからインジケータサブウィンドウを削除する機能があり、インジケータウィンドウを作成する機能がないのはなぜか、開発者にアドバイスをお願いします。
テンプレートを使うか、ウィンドウズ・インジケータを手動で起動する必要があり、チャートの情報が消えてしまうので不便です。
また、リソースファイルからインジケータを起動し、表示できるようにしたい。
あるいはその方法をアドバイスする。
 
Slawa:

ビジュアライゼーション・チップオフ」を企画したのは、あなたではありませんか?

なぜ、バグだと思うのですか?フォルダ名は接続したポート番号に対応する

私だったんですね...。ありがとうございます、わかりました。
 
マクロを行う
#define  MACROS(A) "##A##"
MACROS(Num) を "Num" に置き換えたいのですが、結果はいつも "##A###" になってしまいます。私が望むものを得るためにマクロを定義することは可能ですか?

 

私自身、小さな発見をしました。

void OnStart()
{  
  double dPrice = 1.08249;
  int iPrice = (int)((dPrice / _Point) + 0.1);
  double dNewPrice = iPrice * _Point; // При этом нормализации это значение не требует в OrderSend
  
  if (dPrice != dNewPrice)
    Print((string)(dPrice - dNewPrice)); 
}

Integer * Point(正規化なし)で注文を開き、その後始値を 要求すると、正規化されていないInteger * Pointとは異なる値になります。

なぜOrderSEndは常に正規化されていないInteger * Pointの価格を使用するのでしょうか?

 
fxsaber:
MACROS(Num) を "Num" に置き換えるマクロをやっているのですが、いつも "##A###" と出力されてしまうのです。私が望むものを得るためにマクロを定義することは可能ですか?

マクロ本体から逆さカンマを削除する

マクロパラメータを文字列に変換する場合は、#を使用します。

#define  MACROS(A) #A
トークンの連結に##が使われる
理由: