次のコードの実行中に例外が発生します
bool FieldValueMessage::Get(const std::string &field, double & value)
{
string text;
if(Get(field,text))
{
std::stringstream sstr(text);
sstr >> value;
if(sstr.fail())
return false;
else
return true;
}
else
{
return false;
}
}
Get関数は以下の通りです
bool HashMapMessage::Get(const std::string &field, std::string & value)
{
Field2Value::iterator i = f2v.find(field);
if(i==f2v.end()){
return false;
} else {
value = i->second;
return true;
}
}
Get関数の呼び出し元。ここでは問題はありません。
for(i=quote_fields.begin(),j=0;i!=quote_fields.end();i++,j++){
if (msg->Get((*i).c_str(),tmp)){
if(tmp>0 && x->staging_data[j+1]!=tmp){
x->staging_data[j+1] = tmp;
has_update = true;
}
}
}
コールスタックは
ntdll.dll!_RtlpCoalesceFreeBlocks@16() + 0x35 bytes
ntdll.dll!_RtlFreeHeap@12() + 0x91f bytes
msvcr90.dll!_free() + 0xcd bytes
msvcp90.dll!std::locale::`scalar deleting destructor'() + 0x19 bytes
msvcp90.dll!std::ios_base::_Ios_base_dtor() + 0x39 bytes
msvcp90.dll!std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> >::`vbase destructor'() + 0x19 bytes
asapGeneric.dll!asap::FieldValueMessage::Get(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & field="ASK", double & value=0.055000000000000000) Line 33 + 0x17 bytes C++
_hdf.pyd!asap::TradeAndQuoteNormalizer::ParseQuote(asap::FieldValueMessage * msg=0x027194c0, asap::TAQ * taq=0x02716908) Line 84 + 0x36 bytes C++
フィールドの値は「ASK」です。
このコードは問題なく正常に実行されていますが、「returntrue」ステートメントで例外が発生しています。
プログラムをデバッグすると...sstr.fail()
が返されますfalse
。ポインタはreturn true;
ステートメントにあります。この時点で、1つの手順を実行すると、突然、未処理の例外が発生します。ロケーションxxxxxからのアクセス違反の読み取り。returnステートメントで例外を見たことがありません。この場合、何が間違っていますか?このc++プログラムは、Pythonスクリプトから呼び出されます。