-3

なんらかの理由で、次のようなコードになりました

typedef std::vector<double> Vector;
void f(Vector const& v) {
  Vector const* p;
  p = &v;
}

bad_allocこれにより、割り当ての時点で例外がスローされます。なんで?fキャストされていないベクトルで呼び出されたことは重要ですか? これは gcc 4.1 でコンパイルされた C++03 です。

**編集**これは、例外が表示されるGoogleモック内で実行されているコード内にあります。コードを切り離して個別にコンパイルしようとしたところ、うまくいきました。さらに見る

** さらに編集 ** したがって、問題は実際には、それ自体が別のオブジェクトのメンバーであるオブジェクトのコンストラクターの最後の行で割り当てが発生したことでした。親オブジェクトのイニシャライザ リストの次のオブジェクトは、例外が発生した場所でしたが、gdb は、この割り当てが行われた前のオブジェクトのコンストラクタの最後の行で発生しているように見せかけました。質問がいかに見当違いであったかを思い出させるために、すべての反対票をありがとう。

4

1 に答える 1

2

std::bad_allocポインター変数にポインター値を代入しているだけなので、コードが例外 (またはその他の例外) を発生させる可能性はありません。std::bad_allocは、メモリ割り当てが失敗したときにnewandnew[]演算子によって発生し、このコードではそのようなメモリ割り当てが実行されていません。

于 2013-08-07T17:25:18.433 に答える