tôi nhận được một ngoại lệ trong khi thực hiện đoạn mã sauTại sao chương trình của tôi gặp sự cố tại bảng sao kê trả lại?
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;
}
}
chức năng nhận được là như sau
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;
}
}
gọi của Get chức năng. Tôi không thấy bất kỳ vấn đề nào ở đây.
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;
}
}
}
Call Stack là
[email protected]() + 0x35 bytes
[email protected]() + 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++
giá trị của trường là "ASK".
Mã này đã chạy tốt mà không gặp bất kỳ sự cố nào, nhưng hiện tại tôi đang nhận được ngoại lệ đối với tuyên bố "trả lại đúng".
khi tôi gỡ lỗi mặc dù chương trình ... sstr.fail()
trả về false
. Con trỏ xuất hiện trên câu lệnh return true;
. Tại thời điểm này khi tôi làm một bước duy nhất, đột nhiên tôi nhận được ngoại lệ không thích hợp: Truy cập vi phạm đọc từ vị trí xxxxx. Tôi chưa bao giờ thấy một ngoại lệ trên một tuyên bố trở lại. Điều gì là không chính xác trong trường hợp này? Chương trình C++ này được gọi từ một kịch bản lệnh python.
Mã cho Get (chuỗi, chuỗi) có thể hữu ích. – ergosys
Có lẽ một cái gì đó bên trong 'Get' messes lên ngăn xếp? –
Bạn có thể nhận được một ngoại lệ xung quanh báo cáo trả về nếu một destructor ném một ngoại lệ (nó không phải là thực hành tốt bình thường cho một destructor để ném). Nói rằng, những thứ duy nhất cần hủy là văn bản chuỗi và chuỗi sstr chuỗi, và sẽ rất lạ khi chúng ném. Có thể nguyên nhân của lỗi là ở một số bit không liên quan trực tiếp đến mã của bạn đang làm việc gì đó như bộ đệm tràn hoặc ghi vào bộ nhớ sai, và vấn đề chỉ xảy ra ở đây. –