ページ 11

【C++】vectorについて

Posted: 2015年7月19日(日) 23:54
by スイッチ
はじめまして、スイッチと申します。
C++の経験があまりなく、下記の現象で困っております。

ある関数で
構造体Aの変数aを
vector<A> bにpush_backすると
"Microsoft Visual C++ Debug Library"ウィンドウが表示されて、実行できません。
ウィンドウに表示されたエラーコードは下記となります。
"Debug Error R6010 -abort() has been called"
bはクラスのメンバ変数です。

デバック実行をして、push_backの中を追っていくと
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmemory
のconstruct関数で上記のエラーがでます。
構造体Aのサイズは200バイトで、ピープ領域は十分確保できていると考えています。

実行環境
WINDOWS 7
visualstudio2010

どんな事でもいいので、
解決のヒントになりそうな事を教えて頂ければ幸いです。

Re: 【C++】vectorについて

Posted: 2015年7月20日(月) 00:24
by tk-xleader
 実際にコードを見てみないと的を射た回答をすることは難しいですが、可能性の1つとして考えられるのは、何らかの理由でbの領域が破壊的に書き換えられているということですかね…

〔追記:2015/7/20 0:29〕
 できれば、構造体Aの定義とか、bを含むクラスのコードやabortするオブジェクトのスコープを含んだコードなど、関連しそうなコード片を示していただければ回答も得やすいのではないかと…

Re: 【C++】vectorについて

Posted: 2015年7月20日(月) 13:12
by スイッチ
ご回答ありがとうございます。

構造体Aは下記となります。
Vector3d、Matrix3d がeigenの行列クラス。
Sophus::SE3がSophusのクラスです。

コード:

 
struct A
{
Vector3d t;
Matrix3d R;
double d;
Vector3d n;
Sophus::SE3 T;
int score;
};

Re: 【C++】vectorについて

Posted: 2015年7月20日(月) 13:57
by Rittai_3D
tk-xleader さんが書きました:できれば、構造体Aの定義とか、bを含むクラスのコードやabortするオブジェクトのスコープを含んだコードなど、関連しそうなコード片を示していただければ回答も得やすいのではないかと…
tk-xleaderさんがこうおっしゃっている通り、構造体Aの定義以外のbを含むクラスのコードやabortするオブジェクトのスコープを含んだコードなどを提示してくださらないと具体的な回答が得られないと思います。

Re: 【C++】vectorについて

Posted: 2015年7月20日(月) 15:19
by tk-xleader
 1つ方法として考えられるのは、そのオブジェクトを使用しているコードを、

コード:

try{
    /*ここで囲む*/
}catch(std::exception& e){
    std::cerr << e.what()<<std::endl;
}
上記のコードで囲んで、何か例外が投げられていないかどうかを確認してみる方法はあります。