检测并更正导致运行时错误的代码
Detect and Correcting a code that causes a run time error?
我在一次采访中被问到这个问题。我得到了一个会导致运行时错误的代码。例如。
main()
{
main();
}
现在我必须编写一些代码来检测此运行时错误,并且还被要求更正错误。
我给出的检测运行时错误的答案是:
main()
{
try
{
main();
}
catch(std::runtime_error e)
{
}
}
请告诉我一旦检测到运行时错误,如何解决该问题。我能想到的一个想法是在 catch 块中"向用户显示消息并调用 exit(0)"以安全终止。有没有更好的解决方案?
int main() {
static bool s_isMainCalled = false;
if (s_isMainCalled) {
// show error or print error or return the error to caller.
return 1; // To indicate the recursion
}
s_isMainCalled = true;
main();
/* ???????????*/
return 0;
}
假设上面的源代码被编译为可执行文件并从终端调用。
# g++ recursive-test.c -o recursive-test
#./递归测试
#echo $?/*$?将具有上次执行命令的返回值,此处将得到 1 */
(注意:C++无法使用异常处理堆栈溢出或分段错误)
由于这里几乎没有代码,所以没有明确的答案,因为实际上没有其他代码可以转义。我能想到的最好的就是你说的,只需打印出错误消息并终止程序。也许与其显式调用 exit(0)(在这种情况下可能应该是 exit(1),我只会让程序运行完成,但差异微不足道。
如果我们可以假设一个无限堆栈,那么main()
递归调用自己的语义等价物,没有其他代码存在,那么几乎只是一个无限循环。所以,像这样:
int main()
{ while (1); // or "for (;;);" or any one of many other alternate forms...
}
当然,这并不能真正"检测运行时错误",因为导致错误的条件已被删除......
相关文章:
- 为什么此代码存在运行时错误?
- 蝴蝶代码 88.合并排序数组 c++ 运行时错误
- 在Hackerearth上获取运行时错误(SIGSEGV),无法找出代码中的问题
- 为什么我在此代码中收到运行时错误
- 我的代码上的运行时错误 sigsegv
- 矢量的 c++ 代码中的运行时错误
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 我的代码中出现运行时错误的可能原因是什么?
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- .NET CORE 2 DLL引用带有C 代码运行时错误
- 为什么我的代码给出运行时错误超时
- 为什么我的程序在删除以下代码中的注释后会出现运行时错误?
- 薄板样条形状转换运行时错误 [使用代码 -1073741819 退出]
- C 代码的运行时错误(基于指针)
- 代码中的运行时错误,用于求解最小的偶数可整除
- 为什么我的代码导致运行时错误
- 为什么矢量上的这段代码会给出运行时错误
- 涉及向量的初学者代码,SEIGSEV运行时错误
- 为什么这段代码会产生运行时错误