23

私は持っていstd::vectorます。サイズが6であることを確認しましたが、エラーが発生するかどうかを確認するためにアクセスしようとするvec[6]と、エラーは表示されませんが、代わりにいくつかの数値が表示されます。エラーを出すべきではありませんか?

編集:次のようなもの:

struct Element
{
    std::vector<double> face;
};

int main()
{
    Element elm;

    .... // insert 6 elements into elm.face

    std::cout << elm.face.size() << std::endl; // answer is 6
    std::cout << elm.face[6] << std::endl; // answer is some number
}
4

4 に答える 4

50

STL ベクトルは、.at()メンバー関数が呼び出されたときに境界チェックを実行しますが、 operatorではチェックを実行しません[]

範囲外の場合、[]演算子は未定義の結果を生成します。

于 2013-05-18T02:56:40.217 に答える
4

未定義の動作です。未定義の動作は、必ずしもエラーが発生することを意味するわけではありません:可能性がありますが、あまり意味のない結果が得られる場合があります。

于 2013-05-18T02:55:56.160 に答える
-2

データ構造は 0 から始まるインデックスが付けられているため、vec[6] にアクセスしている場合、これは範囲外になります。メモリの問題が原因でエラーが発生しない可能性があります。実行した以前のコードからの何か、または同様のエラーが存在する可能性があります。コードを投稿してください。

于 2013-05-18T02:56:26.617 に答える