【发布时间】:2012-08-14 10:23:30
【问题描述】:
我得到以下代码:
set<Object*>::iterator it;
try
{
for (it = SetOfObjects->begin(); it != SetOfObjects->end(); ++it)
{
//some actions, not applicable to the question
}
}
catch(...)
{
this->m_error_raiser->error_Name = "Station isn`t connected to Object! Use connectToObject method or list of forecast objects is empty";
this->m_error_raiser->error_Number = 101;
//throw (this->m_error_raiser);
}
当未创建 SetOfObjects 实例并且我尝试遍历该集合时,我得到了预期的运行时错误。
所以我决定处理这个错误,并通过 try catch 向用户提供有关它的信息。
我的问题:虽然我捕获了所有异常,因此它们被视为已处理,但我的程序在运行时仍然终止,这与我期望的行为相矛盾:它应该继续工作因为所有生成的异常都被处理了。这里有什么问题?
【问题讨论】:
-
您遇到什么错误?如果它只是终止,它可能与异常无关。您标记为“不适用”的代码似乎是真正问题的原因。
-
如果
SetOfObjects为 null 或未初始化的指针,则行为未定义。 -
我得到未处理的异常。 N/a 代码真的不适用(我已将其注释掉,没有任何改变)
-
如果你的
SetOfObjects是一个错误的指针,你很可能会遇到段错误。只需检查指针在if块中是否有效。 -
@spin_eight 我想提供帮助,但需要更多详细信息。尝试使用 gbd、MSVC++ 等进行调试。也可以尝试在 linux 上获取核心转储,然后再执行类型
ulimit -c unlimited。然后使用gdb <exec file> <core file>加载核心转储。谢谢
标签: c++ exception exception-handling try-catch