gpt4 book ai didi

c++ - 为什么我的程序在 return 语句处崩溃?

转载 作者:可可西里 更新时间:2023-11-01 17:59:44 27 4
gpt4 key购买 nike

执行以下代码时出现异常

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;
}
}

获取函数如下

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”。

此代码一直运行良好,没有任何问题,但现在我在“return true”语句上遇到异常。

当我调试程序时...sstr.fail() 返回false。指针出现在 return true; 语句中。此时,当我执行单个步骤时,突然出现未处理的异常:从位置 xxxxx 读取访问冲突。我从未在 return 语句中看到异常。在这种情况下有什么不正确的地方?这个 c++ 程序是从 python 脚本调用的。

最佳答案

上面帖子的答案实际上是对这个问题的评论的集合。不止一个回复帮助我找到了解决方案。上述情况的问题是我没有正确初始化登台数据。它应该是一个与 quote_fields 大小相同的数组,但它被初始化为长度 1。因此第一个元素被正确更新但是在 quote_fields 数组中的第二个元素被读取时,我遇到了异常。一旦我尝试访问不正确的元素,显然不会引发异常。异常来自 stringstream 析构函数。根据 Retired Ninja,异常不会立即引发,而是直到堆尝试在稍后的某个点合并 2 个空闲 block (如调用堆栈中所示)。

关于c++ - 为什么我的程序在 return 语句处崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com