检测并更正导致运行时错误的代码

Detect and Correcting a code that causes a run time error?

本文关键字:运行时错误 代码 检测      更新时间:2023-10-16

我在一次采访中被问到这个问题。我得到了一个会导致运行时错误的代码。例如。

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

当然,这并不能真正"检测运行时错误",因为导致错误的条件已被删除......