[ここで重複が見つかりました: C++ - 範囲外アクセスの検出]
次のように、「範囲外のベクトルアクセス」を使用するプログラムがある場合:
std::vector<int> A(2);
...
A[10] = 3;
このエラーを確実に見つける方法はありますか? デバッグモードでコンパイルして、何らかのアサーションが実行を停止するかどうかを確認するようなことを意味します。
今まで自分で調べてきました。しかし、追加のコードを書く必要はないのでしょうか?
PSもちろんアサーションをチェックしました。呼び出されません。
このプログラムでは:
#include <vector>
int main() {
std::vector<int> A(2);
A[10] = 3;
return 0;
}
によって編集された
g++ 1.cpp -O0; ./a.out
そのため、std にはコードにアサーションがないように見えますが、なぜこのような単純なチェックを行わないのか不思議に思うことはありません。