MQL5 iRSIの使い方完全ガイド|RSI取得・CopyBuffer・EA実装まで解説

目次

1. MQL5のiRSIとは何か

MQL5の iRSI は、MetaTrader 5で標準搭載されている RSI(Relative Strength Index) をプログラムから利用するための関数です。
ただし、初心者が最初につまずきやすい重要点があります。iRSIRSIの数値そのものを直接返す関数ではありません。返るのは インジケーターハンドル です。これは「そのRSIを操作するための識別子」のようなもので、実際のRSI値は別途 CopyBuffer() で取得します。MetaQuotes公式ドキュメントでも、iRSI はRSIインジケーターのハンドルを返し、RSIは1本のバッファを持つと説明されています。(MQL5)

1.1 RSI(Relative Strength Index)とは

RSIは、相場が 買われすぎ売られすぎ かを判定する際によく使われるテクニカル指標です。一般的には 0〜100 の範囲で動き、たとえば次のように使われることが多いです。

  • 70以上:買われすぎの目安
  • 30以下:売られすぎの目安

ただし、この数値は絶対ではありません。強いトレンド相場では、70以上や30以下に長く張り付くこともあります。したがって、RSIは「単独で万能」ではなく、相場状況の補助判断として使うのが実務的です。

1.2 MQL5でRSIを扱う方法

MQL5では、RSIを使う基本手順は次の2段階です。

  • iRSI() でRSIインジケーターのハンドルを作成する
  • CopyBuffer() でRSIの計算結果を配列へコピーする

この構造は、MQL4経験者ほど違和感を持ちやすい部分です。MQL5では、標準インジケーターをそのまま数値で受け取る設計ではなく、まずハンドルを作り、そのハンドル経由で値を読む仕組みになっています。公式ドキュメントでも、CopyBuffer() は指定したインジケーターのバッファから必要本数のデータを取得する関数として説明されています。(MQL5)

1.3 iRSI関数の役割

iRSI の役割は、RSIを「使える状態に初期化すること」です。
たとえば、現在の通貨ペア・現在の時間足・期間14・終値ベースのRSIを使いたい場合、概念的には次のような処理になります。

int rsi_handle = iRSI(_Symbol, _Period, 14, PRICE_CLOSE);

ここで得られる rsi_handle は、RSIの最新値ではありません。
このあとで CopyBuffer(rsi_handle, 0, 0, 3, rsi_array); のようにして、はじめてRSI値を配列へ取り出せます。

初心者が特につまずきやすい点は次の3つです。

  • iRSI() の戻り値を、そのままRSI値だと思ってしまう
  • CopyBuffer() を使わずに売買条件を書こうとする
  • ハンドル作成失敗時に INVALID_HANDLE の確認をしない

この3点を最初に理解しておくと、以降の実装で混乱しにくくなります。
また、公式仕様では applied_price に価格種別だけでなく「別インジケーターのハンドル」を渡せるケースもありますが、初心者段階ではまず PRICE_CLOSE を使う理解で十分です。(MQL5)

2. iRSI関数の基本構文

MQL5でRSIを利用するには、まず iRSI() 関数を使って RSIインジケーターのハンドル(識別子) を作成します。
このハンドルを使って CopyBuffer() でRSI値を取得するのが、MQL5における標準的なインジケーター取得パターンです。

重要なポイントは次の通りです。

  • iRSI()RSIの値ではなくハンドルを返す
  • RSIの実際の値は CopyBufferで取得する
  • ハンドル作成は通常 OnInit() 内で1回だけ行う

この構造は iMA(移動平均)や iATR など、他の標準インジケーターでも共通です。
そのため、ここで仕組みを理解しておくと、MQL5のインジケーター処理全体が理解しやすくなります。

2.1 iRSIの関数構文

iRSI() の基本構文は次の通りです。

int iRSI(
   string symbol,
   ENUM_TIMEFRAMES period,
   int ma_period,
   ENUM_APPLIED_PRICE applied_price
);

戻り値

  • int型(インジケーターハンドル)

成功時

  • ハンドル番号が返る

失敗時

  • INVALID_HANDLE

2.2 各パラメータの意味

iRSI() には4つの引数があります。
それぞれの役割を理解しておくと、EA開発での応用が簡単になります。

パラメータ 内容
symbol 通貨ペア
period 時間足
ma_period RSI期間
applied_price RSI計算に使う価格

symbol

対象の通貨ペアを指定します。

EURUSD

現在のチャートを使う場合

_Symbol

初心者は _Symbol を使うのが一般的 です。

period

時間足を指定します。

PERIOD_M1
PERIOD_M5
PERIOD_H1
PERIOD_D1

現在のチャート時間足

_Period

ma_period

RSIの計算期間です。

代表例

用途
14 最も一般的
9 短期
21 中期

多くのEAでは 14が初期設定 です。

applied_price

RSI計算に使用する価格です。

主な種類

意味
PRICE_CLOSE 終値
PRICE_OPEN 始値
PRICE_HIGH 高値
PRICE_LOW 安値
PRICE_MEDIAN 中央値

最も一般的なのは

PRICE_CLOSE

です。

2.3 戻り値(インジケーターハンドル)

iRSI() の戻り値は RSIの数値ではありません
これは初心者が最も間違えやすい部分です。

int rsiHandle = iRSI(_Symbol,_Period,14,PRICE_CLOSE);

この rsiHandle

  • RSIインジケーターの識別子
  • データ取得のためのハンドル

です。

実際のRSI値は次のように取得します。

double rsi[];

CopyBuffer(rsiHandle,0,0,3,rsi);

この rsi[0] が最新RSI値です。

よくある失敗

初心者が特にやりがちなミスです。

1 RSI値と勘違いする

間違い例

double rsi = iRSI(...);

これは 完全に誤り です。

2 INVALID_HANDLEのチェックをしない

安全なコード

if(rsiHandle == INVALID_HANDLE)
{
   Print("RSI handle creation failed");
}

3 OnTickで毎回作る

NG例

OnTick()
{
   int rsi = iRSI(...);
}

これは 無駄な負荷 を生みます。

正しい方法

  • OnInit() で作る

重要な理解

MQL5インジケーター取得は基本的に次の流れになります。

インジケーターハンドル作成
        ↓
CopyBuffer
        ↓
配列へ格納
        ↓
値を参照

この構造は MQL5の最重要パターン です。

3. iRSIの基本サンプルコード(RSI値を取得する)

MQL5でRSIを実際に利用するには、次の3ステップで処理を構築します。

  1. iRSI() でインジケーターハンドルを作成する
  2. CopyBuffer() でRSIデータを配列へコピーする
  3. 配列からRSI値を参照する

この流れは MQL5のすべての標準インジケーターで共通です。
したがって、このパターンを理解すれば iMAiATRiMACD なども同じ方法で扱えるようになります。

3.1 最小構成のRSI取得コード

まずは、EA内でRSIを取得する 最もシンプルな例 を示します。

int rsiHandle;
double rsiBuffer[];

int OnInit()
{
   rsiHandle = iRSI(_Symbol, _Period, 14, PRICE_CLOSE);

   if(rsiHandle == INVALID_HANDLE)
   {
      Print("RSI handle creation failed");
      return(INIT_FAILED);
   }

   return(INIT_SUCCEEDED);
}

void OnTick()
{
   if(CopyBuffer(rsiHandle,0,0,3,rsiBuffer) <= 0)
   {
      Print("RSI data copy failed");
      return;
   }

   double rsiCurrent = rsiBuffer[0];

   Print("RSI = ", rsiCurrent);
}

このコードの動作は次の通りです。

  • EA起動時 (OnInit)
    • RSIインジケーターを生成
  • ティック更新 (OnTick)
    • 最新RSI値を取得
    • ログに出力

3.2 CopyBufferの意味

CopyBuffer() は、インジケーターの計算結果を配列にコピーする関数です。

基本構文

CopyBuffer(handle, buffer_index, start_pos, count, array);

パラメータの意味

引数 内容
handle インジケーターハンドル
buffer_index バッファ番号
start_pos 取得開始位置
count 取得本数
array 格納配列

RSIの場合

CopyBuffer(rsiHandle,0,0,3,rsiBuffer);

意味

内容
0 RSIはバッファ1本
0 最新バー
3 最新3本取得

3.3 RSI配列の読み方

CopyBuffer() で取得した配列は、次の順序になります。

配列 意味
rsiBuffer[0] 最新RSI
rsiBuffer[1] 1本前
rsiBuffer[2] 2本前

double rsiCurrent = rsiBuffer[0];
double rsiPrev    = rsiBuffer[1];

EAでは、通常次のような判定に使います。

if(rsiCurrent > 70)
{
   Print("Overbought");
}

if(rsiCurrent < 30)
{
   Print("Oversold");
}

3.4 よくある失敗

初心者が特につまずきやすいポイントです。

① CopyBufferを呼ばない

間違い例

double rsi = rsiHandle;

ハンドルは RSI値ではありません

② 配列サイズを確保しない

配列は自動拡張されることが多いですが、安全のため

ArraySetAsSeries(rsiBuffer,true);

を使う場合もあります。

③ データ取得失敗をチェックしない

安全コード

if(CopyBuffer(rsiHandle,0,0,3,rsiBuffer) <= 0)
{
   Print("CopyBuffer failed");
}

特に

  • インジケーター初期化直後
  • ヒストリーデータ不足

などで失敗することがあります。

3.5 実務EAでの基本構造

実際のEAでは、RSI取得処理は次の構造になることが多いです。

OnInit
  └ インジケーターハンドル生成

OnTick
  └ CopyBuffer
      └ RSI取得
          └ 売買判定

この設計は MT5 EA開発の基本パターンです。

4. RSIを使った売買ロジック(EA実装例)

RSIは、EA(自動売買プログラム)で エントリー条件の判定 によく使われるテクニカル指標です。
特に代表的なのが、次の2つのロジックです。

  • 買われすぎ / 売られすぎ判定
  • RSIのクロス判定

RSI単体でも売買ロジックを構築できますが、実務では トレンド系インジケーターと組み合わせることが多い です。
ここではまず、最も基本となるRSIロジックの実装例を解説します。

4.1 売られすぎ・買われすぎロジック

RSIの基本的な使い方は次の通りです。

RSI値 状態
70以上 買われすぎ
30以下 売られすぎ

これをEAのエントリー条件にすると、例えば次のようになります。

買い条件

  • RSI < 30

売り条件

  • RSI > 70

4.2 RSIを使った売買判定コード

次のコードは、RSI値を取得し売買シグナルを判定する基本例です。

double rsiCurrent = rsiBuffer[0];

if(rsiCurrent < 30)
{
   Print("BUY SIGNAL");
}

if(rsiCurrent > 70)
{
   Print("SELL SIGNAL");
}

この例では、RSIの状態をログ出力しています。
実際のEAでは、この部分に 注文処理(OrderSend) を追加します。

4.3 RSIクロス戦略

RSIでは、閾値をクロスしたタイミング を売買シグナルにすることも多いです。

買いシグナル

  • RSIが30を下から上へ突破

売りシグナル

  • RSIが70を上から下へ突破

これをコードにすると次のようになります。

double rsiCurrent = rsiBuffer[0];
double rsiPrev    = rsiBuffer[1];

if(rsiPrev < 30 && rsiCurrent >= 30)
{
   Print("BUY SIGNAL");
}

if(rsiPrev > 70 && rsiCurrent <= 70)
{
   Print("SELL SIGNAL");
}

この方法は、単純な閾値判定より ダマシ(誤シグナル)を減らしやすい という特徴があります。

4.4 EAへ組み込む基本例

RSIを使った最小構成のEAロジック例です。

if(CopyBuffer(rsiHandle,0,0,2,rsiBuffer) <= 0)
   return;

double rsiCurrent = rsiBuffer[0];
double rsiPrev    = rsiBuffer[1];

if(rsiPrev < 30 && rsiCurrent >= 30)
{
   Print("BUY CONDITION");
}

if(rsiPrev > 70 && rsiCurrent <= 70)
{
   Print("SELL CONDITION");
}

この部分に注文処理を追加すれば、RSIベースのEAが完成します。

4.5 RSIロジックの注意点

RSIは便利ですが、初心者が誤解しやすい点があります。

① RSIだけでは勝てない

RSIは 逆張り系インジケーター です。
強いトレンドでは、次の状態が長く続きます。

  • RSI > 70 が継続
  • RSI < 30 が継続

この状態で逆張りすると 連続損失になりやすい です。

② トレンド相場では機能しにくい

RSIはレンジ相場では有効ですが、
トレンド相場では次の対策が必要です。

  • 移動平均フィルター
  • トレンド判定
  • ATRフィルター

③ RSI期間の調整

RSI期間を変えると性質が大きく変わります。

RSI期間 特徴
9 シグナル多い
14 標準
21 ノイズ少ない

EAでは 最適化(Optimization) を行うことが一般的です。

4.6 実務EAでよく使われるRSI戦略

RSIは次のような組み合わせで使われることが多いです。

代表的な組み合わせ

  • RSI + 移動平均
  • RSI + ボリンジャーバンド
  • RSI + ATR
  • RSI + トレンドフィルター

単体より フィルター付きロジックの方が安定しやすい 傾向があります。

ただし最終的な結果は

  • 通貨ペア
  • 時間足
  • 市場状況

によって変わるため、必ずバックテストで確認する必要があります。

5. iRSI使用時によく発生するエラーと対処法

iRSI は構文自体はシンプルですが、実際にEAへ組み込むと 「ハンドルは作れたのに値が取れない」「配列エラーが出る」「想定したRSIにならない」 といった問題が起こりやすいです。
原因の多くは、iRSI そのものではなく MQL5のインジケーター取得の流れ を正しく実装できていないことにあります。公式ドキュメントでも、iRSI はハンドルを返し、失敗時は INVALID_HANDLE を返すとされています。(MQL5)

5.1 ハンドル作成に失敗する

最初に確認すべきなのは、iRSI() の戻り値です。
成功した前提で処理を進めると、その後の CopyBuffer() も連鎖的に失敗します。

基本形は次の通りです。

int rsiHandle = iRSI(_Symbol, _Period, 14, PRICE_CLOSE);

if(rsiHandle == INVALID_HANDLE)
{
   Print("iRSI handle creation failed");
   return(INIT_FAILED);
}

よくある原因は次の通りです。

  • 指定したシンボルや時間足の履歴が十分に読み込まれていない
  • 初期化処理の順序が不適切
  • コード全体で別の不整合があり、意図通り初期化されていない

対処の基本は、まず INVALID_HANDLE を必ず判定することです。
これを省くと「なぜ値が取れないのか」が不明確になり、原因切り分けが難しくなります。

5.2 CopyBufferで値が取得できない

iRSI でハンドルを作っても、それだけではRSI値は取得できません
実値を取るには CopyBuffer() が必要です。公式ドキュメントの iRSI ページでも、取得したハンドルからバッファを読む流れが前提になっています。(MQL5)

典型例は次のような形です。

double rsiBuffer[];

if(CopyBuffer(rsiHandle, 0, 0, 3, rsiBuffer) <= 0)
{
   Print("CopyBuffer failed");
   return;
}

ここで失敗しやすい理由は主に3つです。

  • インジケーター計算がまだ完了していない
  • 必要本数ぶんのデータがまだ存在しない
  • ハンドル自体が無効

特にEA起動直後は、チャートや履歴の状態によって すぐに十分なデータが揃わないことがあります
そのため、CopyBuffer() の戻り値を必ず確認し、失敗時は無理に配列を読まない実装にするのが安全です。

5.3 配列エラー(array out of range)が出る

初心者が非常に多く遭遇するのが array out of range です。
これは、取得できていない配列要素にアクセスしたときに起こります。

たとえば次のコードは危険です。

double rsiBuffer[];

CopyBuffer(rsiHandle, 0, 0, 1, rsiBuffer);

double rsiCurrent = rsiBuffer[0];
double rsiPrev    = rsiBuffer[1];

この例では1本しか取得していないのに、rsiBuffer[1] を読もうとしているためエラーになります。

安全に書くなら、取得本数と参照インデックスを一致させる 必要があります。

double rsiBuffer[];

if(CopyBuffer(rsiHandle, 0, 0, 2, rsiBuffer) < 2)
{
   Print("Not enough RSI data");
   return;
}

double rsiCurrent = rsiBuffer[0];
double rsiPrev    = rsiBuffer[1];

この種のエラーは、iRSI の問題というより 配列管理の問題 です。
ただし検索ユーザーは「MQL5 iRSI エラー」として探すことが多いため、記事内では明確に分けて説明するのが有効です。

5.4 OnTickのたびにiRSIを作ってしまう

MQL5では、インジケーターハンドルは通常 OnInit() で1回だけ作成 します。
毎ティックで iRSI() を呼ぶ設計は、不要な負荷と不安定要因を増やしやすいです。公式コミュニティでも、ハンドルは OnInit で一度だけ取得し、以後は CopyBuffer で値を読む運用が推奨されています。(MQL5)

避けたい例です。

void OnTick()
{
   int rsiHandle = iRSI(_Symbol, _Period, 14, PRICE_CLOSE);
}

推奨パターンは次の通りです。

  • OnInit() でハンドル作成
  • OnTick()CopyBuffer() 実行
  • 不要になったら IndicatorRelease() で解放

なお、IndicatorRelease() は不要になったインジケーターのメモリ解放に使えると公式ドキュメントにあります。(MQL5)

5.5 最新値と確定足を混同する

RSIをEA条件に使うとき、rsiBuffer[0]最新バーの値 です。
ただしこれは、まだ確定していない進行中バーの値を含むことがあります。
そのため、戦略によっては rsiBuffer[1] を使って 確定足ベース で判定した方が再現性が高い場合があります。

よくある失敗は次の通りです。

  • バックテストでは勝つのに実運用で挙動がぶれる
  • 条件成立と不成立がティックごとに変わる
  • シグナルが「出たり消えたり」する

この問題はエラーではありませんが、実務上の重大なつまずきポイント です。
再現性を重視するなら、まずは次のように考えると整理しやすいです。

  • rsiBuffer[0]:進行中バーを含む最新値
  • rsiBuffer[1]:1本前の確定済みバー

5.6 エラーを減らすための最低限チェックリスト

iRSI 実装時は、少なくとも次を毎回確認すると安定しやすくなります。

  • iRSI() の戻り値が INVALID_HANDLE でないか
  • CopyBuffer() の戻り値が必要本数以上か
  • 参照する配列インデックスが取得本数内に収まっているか
  • ハンドルを OnTick() で毎回作っていないか
  • 最新値を使うのか、確定足を使うのかを明確にしているか

この5点を押さえるだけで、初心者が遭遇する iRSI トラブルの大半は回避できます。

6. iRSIをEAで使う際の実践的な注意点

iRSI を使ったEAは比較的簡単に作れますが、実際の運用ではRSI単体では安定した成績になりにくいことが多いです。
RSIは非常に有名なオシレーター系インジケーターですが、その性質を理解せずに使うと、バックテストと実運用の結果が大きく乖離することがあります。

ここでは、EA開発でRSIを使う際に特に重要なポイントを整理します。

6.1 RSIはレンジ相場向きの指標

RSIは基本的に 逆張り系インジケーター です。
そのため、次のような相場で有効になりやすい特徴があります。

  • レンジ相場
  • ボラティリティが安定している相場
  • トレンドが弱い相場

逆に、強いトレンドが発生すると次の状態が長く続くことがあります。

状況 RSI状態
強い上昇トレンド RSI > 70 が長時間継続
強い下降トレンド RSI < 30 が長時間継続

この状態で単純に逆張りすると、損失が連続する可能性が高くなります
そのため、実務EAではRSI単体ではなく トレンドフィルターを組み合わせる ケースが一般的です。

6.2 トレンドフィルターを組み合わせる

RSI戦略の安定性を高めるためには、トレンド判定を追加する方法がよく使われます。

代表例

フィルター 目的
移動平均 トレンド方向判定
ATR ボラティリティ確認
ADX トレンド強度判定

例として、移動平均と組み合わせるロジックは次のようになります。

買い条件

  • 価格 > 移動平均
  • RSI < 30

売り条件

  • 価格 < 移動平均
  • RSI > 70

このようにすることで、トレンドに逆らうエントリーを減らすことができます。

6.3 RSIパラメータの最適化

RSIの挙動は、設定した期間によって大きく変化します。

RSI期間 特徴
7〜9 シグナル多い
14 標準
20〜21 ノイズ少ない

短期設定

  • シグナル多い
  • ダマシ増える

長期設定

  • シグナル少ない
  • 安定性高い

EA開発では、通常 Strategy Testerの最適化機能 を使って調整します。
ただし、過剰最適化(オーバーフィッティング)には注意が必要です。
バックテストに完全適合した設定は、将来の相場では機能しない場合があります。

6.4 RSIの時間足依存

RSIの有効性は、時間足によっても変わります。

時間足 特徴
M1〜M5 ノイズ多い
M15〜H1 バランス
H4〜D1 シグナル少ない

一般的に

  • 短期足:シグナル多いが安定性低い
  • 長期足:シグナル少ないが信頼度高い

という傾向があります。

EAでは

  • スキャルピング
  • デイトレード
  • スイング

など戦略に応じて時間足を選ぶ必要があります。

6.5 RSI単体EAの限界

RSIは有名なインジケーターですが、単体で長期的に優位性を維持するのは難しいケースが多いです。

理由

  • トレンド相場に弱い
  • 市場参加者に広く知られている
  • ダマシシグナルが多い

そのため、実務EAでは次のような構成が多くなります。

典型的なEA構造

トレンド判定
   ↓
エントリー条件(RSI)
   ↓
ボラティリティ確認
   ↓
リスク管理

このように、RSIは エントリー条件の一部として使う のが現実的です。

6.6 実装時のチェックポイント

RSIをEAに組み込む際は、次の点を確認するとトラブルを減らせます。

チェック項目

  • RSI値取得が正常に行われているか
  • 最新値か確定足かを区別しているか
  • CopyBufferエラー処理があるか
  • RSIパラメータが適切か
  • トレンドフィルターがあるか

これらを整理しておくと、バックテストと実運用の差を小さくできます。

7. FAQ(よくある質問)

7.1 MQL5のiRSIとは何ですか?

iRSI は、MetaTrader 5 の標準テクニカル指標 RSI(Relative Strength Index) をプログラムから利用するための関数です。
RSIは相場の 買われすぎ・売られすぎ を判定するオシレーター系インジケーターで、値は通常 0〜100の範囲 で推移します。

ただし iRSI() が返すのは RSIの値ではなくインジケーターハンドル です。
実際のRSI値は CopyBuffer() を使って取得します。

7.2 iRSIの戻り値はRSI値ですか?

いいえ。
iRSI() の戻り値は インジケーターハンドル(識別番号) です。

int rsiHandle = iRSI(_Symbol,_Period,14,PRICE_CLOSE);

RSI値を取得するには次の処理が必要です。

double rsi[];

CopyBuffer(rsiHandle,0,0,1,rsi);

double rsiValue = rsi[0];

7.3 CopyBufferとは何ですか?

CopyBuffer() は、インジケーターの計算結果を 配列へコピーする関数 です。

基本構文

CopyBuffer(handle, buffer_index, start_pos, count, array);

RSIの場合

  • buffer_index = 0(RSIはバッファ1本)

CopyBuffer(rsiHandle,0,0,3,rsiBuffer);

7.4 iRSIはどこで作るべきですか?

通常は OnInit() 内で1回だけ作成 します。

理由

  • インジケーターハンドルは再利用できる
  • 毎ティック作ると処理負荷が増える

推奨構造

OnInit
   iRSI作成

OnTick
   CopyBufferで値取得

7.5 rsiBuffer[0] と rsiBuffer[1] の違いは?

CopyBuffer() で取得した配列は次の意味になります。

配列 意味
rsiBuffer[0] 最新バー
rsiBuffer[1] 1本前
rsiBuffer[2] 2本前

注意点

  • rsiBuffer[0]未確定バーの値 を含む場合があります
  • 安定した判定には rsiBuffer[1](確定足) を使うケースも多いです

7.6 RSIの一般的な設定値は?

最も一般的なRSI設定は次の通りです。

パラメータ
RSI期間 14
買われすぎ 70
売られすぎ 30

ただし、最適な設定は

  • 通貨ペア
  • 時間足
  • 戦略

によって変わります。

7.7 RSIだけでEAを作ることはできますか?

可能ですが、実務では RSI単体では安定しないことが多い です。

理由

  • トレンド相場に弱い
  • ダマシシグナルが多い

そのため、実際のEAでは次のような組み合わせがよく使われます。

  • RSI + 移動平均
  • RSI + ATR
  • RSI + トレンドフィルター

7.8 iRSIでよくあるエラーは?

初心者がよく遭遇するエラーは次の通りです。

エラー 原因
INVALID_HANDLE ハンドル作成失敗
CopyBuffer failed データ未取得
array out of range 配列参照ミス

特に多い原因

  • CopyBufferを使っていない
  • 配列サイズ不足
  • ハンドル作成失敗の未チェック

これらを確認すると、ほとんどの問題は解決できます。

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny