1. ホーム
  2. C++

ベクトル添え字が範囲外のコンテナの使用、その他類似のエラー

2022-02-20 15:14:54
このエラーが報告されると、ベクターに格納されたデータがベクターのサイズを超えたために起こるメモリオーバーフローと思われるポップアップウィンドウが表示されます。

解決方法は以下の通りです。

Vector<string>ベクターの後に、直接渡すことはできません。

vector[0] = "aa"

vector[1] = "bb" などと代入すると、out-of-bounds になってしまいます。(添え字は変更であり、挿入ではありません。添え字を使いたい場合は、初期化時に十分な要素があることを確認する必要があり、通常はpush_back()で行います)

まずtagSeq.resize(n)ステートメントを使って、ベクトルの大きさを初期の長さに調整し、その後、上記の方法で値を代入します。重要なのは リサイズ() 関数でコンテナの初期長を設定します。

もう一つの方法は、つまり、Vector<string> ベクターの後に、ベクターのpush_back("aa")メソッドを呼び出してデータを追加し、ベクターのサイズが範囲外にならないように自動的にメモリ要求する方法です。

また、コンテナの使用は、何度もpush_back()関数を介してコンテナに要素を追加する前に、特定の条件を満たすために判断に基づいているが、決して条件を満たして終了することが、つまり、コンテナに要素のいずれかを追加しなかった、この時点で、もし添え字はv[n - 1]など、またはいくつかの関数を通じて、コンテナにアクセスするようにVB()、VF()、などとしてコンテナ。は添え字オーバーランエラー(メモリオーバーフロー)になります。vは要素を格納していないので、vの長さやv.size()は0に等しく、類似のv[n-1]やv.front()などは意味がないので、エラーになりますが無視しやすいと思います。上記のように添え字アクセスやコンテナの何らかの関数を使わなければならない場合は、if条件 if (!v.empty()) 、つまりvが空でなければ上記のアクセス操作は可能であることを追加すればよい。