
MT4・MT5 実行中のログメッセージ
invalid pointer access
- 意味
- 無効なポインタにアクセスしてプログラムが停止した
「invalid pointer access」とは
new で作っていない、または delete で削除済みのオブジェクトのポインタを使ったため、プログラムが停止したときのメッセージです。
ログの表示例
invalid pointer access in 'MyEA.mq5' (60,12)
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
「invalid pointer access」の主な原因
- クラスのポインタを new で作る前に使った
- delete したポインタを使い続けた
- OnInit() で new に失敗しているのに確認していない
「invalid pointer access」の対処法
- 使う前に CheckPointer(ptr) != POINTER_INVALID を確認する
- delete した後はポインタに NULL を入れる
- ポインタではなく普通の変数(CTrade trade;)で宣言できるなら、そのほうが安全
コード例(MQL5)
// ポインタを使う前に有効か確認する(invalid pointer access 対策)(MQL5)
class CSignal
{
public:
int Value() { return 1; }
};
CSignal *g_signal = NULL;
int OnInit()
{
g_signal = new CSignal();
return (CheckPointer(g_signal) == POINTER_INVALID) ? INIT_FAILED : INIT_SUCCEEDED;
}
int ReadSignal()
{
if(CheckPointer(g_signal) == POINTER_INVALID) return 0; // 無効なら使わない
return g_signal.Value();
}
void OnDeinit(const int reason)
{
if(CheckPointer(g_signal) == POINTER_DYNAMIC) delete g_signal;
g_signal = NULL; // 削除したら NULL にしておく
}MetaEditor(MT5)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












