为什么我的程序在返回语句时崩溃
Why does my program crash at the return statement?
我在执行以下代码段时出现异常
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 读取的访问冲突。我从未在返回语句上看到过异常。在这种情况下,什么是不正确的?这个 c++ 程序是从 python 脚本调用的。
对上述帖子的回答实际上是对该问题的评论集合。 不止一个回复帮助我找到了解决方案。上述情况下的问题是我没有正确初始化暂存数据。它应该是一个大小与quote_fields相同的数组,但它被初始化为长度 1。所以第一个元素更新正确,但在数组中的第二个元素quote_fields读取期间,我得到了上述异常。一旦我尝试访问不正确的元素,就不会引发异常。异常来自字符串流析构函数。根据退休的忍者,异常不会立即引发,而只会直到堆尝试在以后的某个时间点合并 2 个空闲块,如调用堆栈所示。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- 程序崩溃并显示"std::out_of_range"错误
- C++ 非 void 函数的崩溃没有返回语句
- C++:添加逻辑上正确的 if 语句会使我的程序崩溃
- C++在try-catch语句处崩溃
- C++-映射迭代器中的if语句导致程序崩溃的原因
- 使用 Qt5 的抛出语句时即时崩溃
- 由于 if 语句,C++ 程序崩溃
- 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 而不返回语句的函数不同
- 为什么我的程序在返回语句时崩溃
- C++ 随机 COUT 语句导致程序在重载的"="运算符内崩溃
- 程序因为if语句而崩溃
- 为什么当我忘记返回语句时,我的c++程序崩溃了,而不是仅仅返回垃圾
- 为什么这个sprint语句崩溃了